【发布时间】:2017-01-19 17:03:39
【问题描述】:
我试图从我的 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?
【问题讨论】:
-
你能找到
std::flush吗? -
我怀疑
std::endl没有链接,因为它只是<< '\n' << std::flush -
它可能是一个只有标题的函数。
-
如果你使用 C++ 编译器前端,如
g++或clang++来构建你的程序,或者使用像 XCode 这样的 IDE,那么你不需要显式链接任何库来访问标准库。那么你能告诉我们实际问题是什么吗? 为什么你想知道std::endl在哪里? -
它可能是一个模板,所以它需要在源代码中可用,并且不能编译到库中(除非特别指示包含实例化)。