1

我正在研究雪豹机器(10.6.5),并且正在寻找我们的 C++ 应用程序中的错误。但是,我无法使用 g++ -O0 -g 构建我们的应用程序,因为链接器崩溃:

g++-4.0 -arch i386 -arch x86_64 ...  -dynamic -bundle -o SOMELIB.dylib <SOME OBJECTS>...
collect2: ld terminated with signal 11 [Segmentation fault]
collect2: ld terminated with signal 11 [Segmentation fault]

我猜这两次崩溃是因为有两个“-arch”标志。我设法得到一个核心文件,它说崩溃发生在

(gdb) bt
#0  0x000000010001a2eb in Linker::synthesizeDebugNotes ()
#1  0x0000000100024cc5 in Linker::collectDebugInfo ()
#2  0x0000000100028198 in Linker::link ()
#3  0x000000010002a9eb in main ()

有了这个提示,我从编译器标志中删除了“-g”,一切正常。此外,我们的大部分东西都可以使用“-g”构建,但只有两个大模块(.dylibs)不能,所以我没有这些的调试信息。而且,具有讽刺意味的是,这个错误就潜伏在那里,在这些 dylib 之一中。

该错误很可能是由于未初始化的内存使用造成的,因为它很少出现,并且在 valgrind 下运行应用程序会发现有一些未初始化的内存引用,但由于缺少调试信息,它只是说它发生在模块 XXX 内( dylib 我不能用“-g”编译)

因此,我尝试从 Apple 的开源网站下载 ld 实用程序,但我发现(就像那个人一样)它不会构建,因为缺少对 Mac 特定版本的 libunwind 的依赖,Apple 不会提供离开。因此我无法重新编译链接器。

所以下一个问题是——我现在该怎么办?我真的很想避免联系 Mac 支持...

ld 版本是“ld64 97.17”,XCode 是 3.2.5,gcc 是 4.0.1。

我真的需要一些方向...

4

0 回答 0