OSX "ld" : 如何显示未解析符号的损坏名称?如何获取地图文件?
OSX "ld": how to show mangled names of unresolved symbols? how to get a map file?
在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;
然后一切都很好,因为我们停止使用move构造函数,开始使用非move赋值运算符
我正试图追踪这件事,但由于缺乏传统工具,我受到了阻碍。我立刻想到两个问题:
如何让
ld
生成映射文件?-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
在libc++<string>
标头中,basic_string::operator=(const char*)
被声明/定义为:
_LIBCPP_INLINE_VISIBILITY basic_string& operator=(const_pointer __s) {return assign(__s);}
_LIBCPP_INLINE_VISIBILITY是一个扩展为"始终内联"answers"标记隐藏"的宏。因此,这个成员函数应该总是内联的,链接器永远不应该查找它
您是否偶然更改了_LIBCPP_INLINE_VISILITY宏的定义?
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- VSCode C++调试文件名中包含中文字符的文件时插件损坏
- Dll中缺少什么(致命错误LNK1107:无效或损坏的文件:)
- 修复可能损坏的 .stl 文件上的法线
- 有没有办法修复因未正确关闭 boost::archive::binary_oarchive 而损坏的文件?
- 窗口中的文件损坏 电源故障后操作系统
- 试图在文件中阅读时堆积损坏
- 编译项目时文件无效或损坏,包括 V8
- 从 /MD Exe 文件中删除 /MDd 的 DLL 内存会导致堆损坏
- 写入文本文件的数据部分损坏且无法恢复
- std::文件系统"root_name"定义在 Windows 上损坏
- 获取无效或损坏的文件LNK1107:尝试链接 OpenSceneGraph 教程.dll时无法0x378读取
- 当我使用文件作为c ++程序的输入时,它会损坏
- 问题是将数据写入特定单元格并且文件已损坏
- 写入文件时出现堆损坏
- OSX "ld" : 如何显示未解析符号的损坏名称?如何获取地图文件?
- 如何检查文件的损坏
- Flashdrive损坏的文件系统上的文本文件恢复
- 可执行文件在被复制时以某种方式损坏
- 在不损坏文件系统的情况下将原始数据"signature"写入磁盘