<div dir="ltr">Hi.<div><br></div><div><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.8048000335693px;background-image:initial;background-repeat:initial">I'm using some LLVM tools (like <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:pre-wrap;background:rgb(238,238,238)">llvm-nm</code>) as static libraries. I.e. i copied source llvm-nm.cpp, renamed <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:pre-wrap;background:rgb(238,238,238)">main(..)</code> to <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:pre-wrap;background:rgb(238,238,238)">llvm_nm(..)</code> and compiled it as static library. I'd like to forward standard output to my file.</p><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.8048000335693px;background-image:initial;background-repeat:initial">I've tried to use the next approach:</p><pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:14px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px;word-wrap:normal;color:rgb(0,0,0);line-height:17.8048000335693px;background:rgb(238,238,238)"><code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;background-image:initial;background-repeat:initial"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">  </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175);background:transparent">int</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">    out_fd</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> err_fd</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">;</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175);background:transparent">fpos_t</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> out_pos</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> err_pos</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">;</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">

  </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">// redirect out</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  fflush</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  fgetpos</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">&</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">out_pos</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  out_fd </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> dup</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">fileno</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">));</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  freopen</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">outFilename</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">"w"</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">

  </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">// execute</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175);background:transparent">int</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> ret </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> llvm_nm</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">argc_</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> argv_</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">

  </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">// restore output</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  fflush</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  dup2</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">out_fd</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> fileno</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">));</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  close</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">out_fd</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  clearerr</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
  fsetpos</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">stdout</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">&</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">out_pos</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span></code></pre><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.8048000335693px;background-image:initial;background-repeat:initial">The problem is that it's not forwarded (it works if i add <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:pre-wrap;background:rgb(238,238,238)">printf()</code> in nm source code but not for <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:pre-wrap;background:rgb(238,238,238)">nm</code> output). I've looked to the source code and i can see output is done using <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:pre-wrap;background:rgb(238,238,238)">llvm::outs()</code> stream:</p><pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:14px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px;word-wrap:normal;color:rgb(0,0,0);line-height:17.8048000335693px;background:rgb(238,238,238)"><code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;background-image:initial;background-repeat:initial"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">outs</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">()</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"><<</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">"Archive map"</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"><<</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">"\n"</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">;</span></code></pre><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.8048000335693px;background-image:initial;background-repeat:initial">And <a href="http://llvm.org/docs/doxygen/html/raw__ostream_8cpp_source.html" rel="nofollow" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(74,107,130);text-decoration:none;background:transparent">it's implemented</a> the next way:</p><pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:14px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px;word-wrap:normal;color:rgb(0,0,0);line-height:17.8048000335693px;background:rgb(238,238,238)"><code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;background-image:initial;background-repeat:initial"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">/// outs() - This returns a reference to a raw_ostream for standard output.</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00702</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">/// Use it like: outs() << "foo" << "bar";</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00703</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> raw_ostream </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">&</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">llvm</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">::</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">outs</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">()</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">{</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00704</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">   </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">// Set buffer settings to model stdout behavior.</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00705</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">   </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">// Delete the file descriptor when the program exits, forcing error</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00706</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">   </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,128,128);background:transparent">// detection. If you don't want this behavior, don't use outs().</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00707</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">   </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(0,0,139);background:transparent">static</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> raw_fd_ostream S</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">STDOUT_FILENO</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">,</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(0,0,139);background:transparent">true</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">);</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00708</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">   </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(0,0,139);background:transparent">return</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> S</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">;</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">
</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0);background:transparent">00709</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">}</span></code></pre><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.8048000335693px;background-image:initial;background-repeat:initial">How can i redirect that output to my file?</p></div></div>