GCC试图在OSX 10.6上编译64位代码

时间:2010-01-14 05:40:33

标签: c++ c macos gcc

我有一个全新的非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标志的编译工作正常。

4 个答案:

答案 0 :(得分:17)

答案 1 :(得分:1)

我不知道为什么会这样(对我来说很好),但是

  1. 尝试使用g++进行编译,或链接到libstdc++___gxx_personality_v0是GNU C ++用于为析构函数设置SjLj回调的符号,因此由于某种原因,C ++代码会进入您的C代码。
  2. 删除-m64标记。据我所知,GCC 4.2在10.6上生成的二进制文件默认为64位。您可以通过file检查输出,并确保它显示为“Mach-O 64位可执行文件x86_64”。
  3. http://developer.apple.com/technology/xcode.html重新安装最新的Xcode。

答案 2 :(得分:0)

行:

  • 添加-m64什么都不做,没有选项的普通gcc是64位编译
  • 如果你真的只是在CD外,那么你应该更新并安装一个新的xcode
  • 您的程序可以在10.6.2
  • 上使用或不使用-m64

答案 3 :(得分:0)

在创建和使用包含Objective-C ++代码的pod时,使用CocoaPods时遇到了类似的问题,所以我认为它也值得一提:

您应该编辑包含c ++代码的pod的.podspec,并添加如下行:

s.xcconfig = {
    'OTHER_LDFLAGS' => '$(inherited) -lstdc++',
}