使Xcode在链接目标文件时运行g ++

时间:2013-01-06 22:50:12

标签: gcc cuda g++ xcode4.5

我正在尝试在XCode 4.5.2中构建一个小样本CUDA代码matrixMul.cu。我做了:

  1. 一个自定义脚本,它运行nvcc以将.cu文件编译为目标文件。
  2. 然后让xcode将其与cuda lib链接以生成最终的可执行文件matrixMul
  3. 但是,在链接阶段,xcode总是在.o文件而不是g ++上运行gcc,因此导致错误:

    /Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch x86_64 -isysroot ...
    Undefined symbols for architecture x86_64:
    "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int)in matrixMul.o
    "std::ios_base::Init::~Init()", referenced from:
      ___tcf_0 in matrixMul.o
    ld: symbol(s) not found for architecture x86_64
    collect2: ld returned 1 exit status
    

    我不知道如何让XCode运行g ++而不是gcc来链接目标文件。我在项目中只有.cu文件所以没有.cpp来表示它是c ++。但是,当我在一开始创建xcode项目时,我会选择C ++。无论我在构建设置中选择Apple LLVM编译器还是LLVM GCC,它都会为我运行gcc。

    谢谢! 加里

1 个答案:

答案 0 :(得分:2)

事实证明我不能强制XCode使用g ++进行链接,但有一个解决方法,我将-lstdc ++添加到“其他链接器标志”部分,使gcc链接到c ++ lib。

它现在有效,但我不太确定这是否是唯一/最佳解决方案。如果有人有其他解决方案,请告诉我。

加里