在我编译的标准库中std :: endl在哪里?

时间:2017-01-19 17:03:39

标签: c++ llvm libc++

我试图通过他们的错误名称从我的C ++标准库中找到函数。我在macOS上,所以使用nm命令我可以检查dylib

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

在输出中,我可以找到std::cout的错位名称:

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

但是,我找不到std::endl的任何条目。

有趣的是,我的LLVM IR解释器也找不到std::endl,尽管std::cout工作正常:

LLVM ERROR: Program used external function     
'__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_' which could not be resolved!

我希望在我的系统上找到std::endl的哪个位置?

1 个答案:

答案 0 :(得分: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

虽然flush没有这样的属性:https://github.com/llvm-mirror/libcxx/blob/master/include/ostream#L938