0

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

  1. 运行 nvcc 以将 .cu 文件编译为目标文件的自定义脚本。
  2. 然后让 xcode 将其与 cuda lib 链接以生成最终的可执行 matrixMul

但是,在链接阶段,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。

谢谢!加里

4

1 回答 1

2

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

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

加里

于 2013-01-08T20:10:13.973 回答