gpt4 book ai didi

c++ - OSX "ld": how to show mangled names of unresolved symbols? 如何获取 map 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:41 25 4
gpt4 key购买 nike

在 OS X 10.8.2 (Mountain Lion) 上,我尝试使用 libc++(不是 libstdc++)链接一个程序,ld 给我一个未解析的符号错误。

Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(char const*)", referenced from:
bool process_load_commands<mytype_t>(unsigned char*, ...) in module_mach_o.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这似乎是指以下行的代码生成:

mystdstring = ::std::string(mycharpointer + myint);

如果我将其更改为

mystdstring = mycharpointer + myint;

然后一切正常,因为我们停止使用移动构造函数并开始使用非移动赋值运算符。

我正试图追踪这一点,但由于缺乏传统工具而受阻。立即想到两个问题:

  • 如何让 ld 生成 map 文件? -map -Map -Wl,-map=foo -Wl,-Map=foo 无法使用这个链接器。

    @(#)PROGRAM:ld  PROJECT:ld64-134.9
    configured to support archs: armv6 armv7 armv7s i386 x86_64
    LTO support using: LLVM version 3.1svn, from Apple Clang 4.1 (build 421.11.65)
  • 如何让 ld 向我显示未解析的 C++ 符号的未分解名称,以便我可以轻松地 grep map/nm 文件?

当然,如果有人以前见过这个特定错误并且知道如何修复它,我也会接受这些答案。 :)

编辑:我意识到我上面写的关于移动构造函数的内容没有意义,因为在我写这个问题的过程中症状发生了变化。 :P 每当我更好地了解正在发生的事情时,我都会修复它。

编辑 #2:错误消失了。我暂时责怪我们自建的 libc++:我最好的猜测是它里面没有任何符号(由于构建错误的拱门),我们真的很幸运我们除了这个以外,从未尝试使用任何非内联函数。

不过,我关于 -map 和显示错位名称的问题仍然悬而未决。

最佳答案

要让 clang 显示未解析符号列表的错位符号名称,请使用链接器/编译器标志:

-Xlinker --no-demangle

关于c++ - OSX "ld": how to show mangled names of unresolved symbols? 如何获取 map 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463431/

25 4 0