2017-01-19 7 views
1

私は自分のC++標準ライブラリから関数を見つけようとしています。私はstd::coutのためのマングルされた名前を見つけることができ、出力でコンパイルされた標準ライブラリのstd :: endlはどこにありますか?

nm -g /usr/local/lib/libc++.dylib 
nm -g /usr/local/lib/libc++abi.dylib 

::私は、私はdylibを検査することができnmコマンドを使用して、MacOSで午前

0000000000079ec0 S __ZNSt3__14coutE 
0000000000079f60 S __ZNSt3__15wcoutE 
etc... 

をしかし、私は、任意のを見つけることができません。 std::endlのエントリ。 std::coutが正常に動作しますが、

興味深いことに、私のLLVM IRインタープリタはまた、std::endlを見つけることができません:

私は私のシステムで std::endlを見つけることを期待すべきである
LLVM ERROR: Program used external function  
'__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_' which could not be resolved! 

+0

あなたは 'のstd :: flush'を見つけようとすることはできますか? – Rakete1111

+2

'std :: endl'が単に' << '\ n' << std :: flush'のようにリンクされていないと思われます。 – YSC

+0

'std :: flush'が存在するようです:' 0000000000011bb0 T __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv' – sdgfsdh

答えて

2

YSCに記載されているように、std::endlは関数(おそらくインライン展開されています)であり、すべてが終了行\n文字を出力してからflushを呼び出します。

http://en.cppreference.com/w/cpp/io/manip/endl

libcxxが隠さてendl持って次のようになります。フラッシュは、このような属性を持っていませんがhttps://github.com/llvm-mirror/libcxx/blob/master/include/ostream#L999

を:https://github.com/llvm-mirror/libcxx/blob/master/include/ostream#L938

+1

Uhm ...それは[はっきり](http://en.cppreference.com/w/cpp/io/manip/endl)テンプレートなので、その理由は、それがC++標準にコンパイルされない理由ですとしょうかん。それがインライン化されるかどうかは別の問題です。 – IInspectable

+0

[std :: flush](http://en.cppreference.com/w/cpp/io/manip/flush)もテンプレートです – crezefire

+0

だから? OPは、 'std :: flush'がC++標準ライブラリからもエクスポートされることは決して示していませんでした。私はあなたが作ろうとしていることを理解していません。 – IInspectable

関連する問題