我有一个全新的非CD OSX 10.6安装。 我现在想将以下简单的C程序编译为64位二进制文件:
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
我按如下方式调用gcc:
gcc -m64 hello.c
然而,这失败并出现以下错误:
未定义的符号:
"___gxx_personality_v0", referenced from:
_main in ccUAOnse.o
CIE in ccUAOnse.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
这里发生了什么?为什么gcc会死? 没有-m64标志的编译工作正常。
答案 0 :(得分:17)
答案 1 :(得分:1)
我不知道为什么会这样(对我来说很好),但是
g++
进行编译,或链接到libstdc++
。 ___gxx_personality_v0
是GNU C ++用于为析构函数设置SjLj回调的符号,因此由于某种原因,C ++代码会进入您的C代码。 或 -m64
标记。据我所知,GCC 4.2在10.6上生成的二进制文件默认为64位。您可以通过file
检查输出,并确保它显示为“Mach-O 64位可执行文件x86_64”。 或 答案 2 :(得分:0)
行:
答案 3 :(得分:0)
在创建和使用包含Objective-C ++代码的pod时,使用CocoaPods时遇到了类似的问题,所以我认为它也值得一提:
您应该编辑包含c ++代码的pod的.podspec
,并添加如下行:
s.xcconfig = {
'OTHER_LDFLAGS' => '$(inherited) -lstdc++',
}