2013-01-06 36 views
0

我想在XCode 4.5.2中构建一个小样本的CUDA代码matrixMul.cu。我做了:让Xcode在链接一个目标文件上运行g ++

  1. 自定义脚本运行nvcc将.cu文件编译为目标文件。
  2. 然后让Xcode的将其与CUDA LIB链接到产生最终的可执行matrixMul

然而,在连接阶段,Xcode中始终运行这一点,结果上的.o文件,而不是G ++ GCC和becos出现错误:

/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。

谢谢! Gary

+0

当你告诉Xcode源文件是C++时会发生什么? (在右窗格的第一个选项卡中)。 – trojanfoe

+0

@trojanfoe:改变源到C++型后,xcode的运行铛++进行联动,这使我类似的错误的MSG: 的/ usr /斌/铛++ -arch x86_64的-isysroot ... 为架构x86_64的未定义符号: “std :: ios_base :: Init :: Init()”,引用来自: __static_initialization_and_destruction_0(int,int)in matrixMul.o “std :: ios_base :: Init ::〜Init()”,引用来自: 矩阵中的___tcf_0Mul.o ld:找不到体系结构x86_64的符号 clang:error:linker命令失败,退出代码1(使用-v查看调用) – Gary

+0

什么是Init类? – trojanfoe

回答

2

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

它现在工作,但我不太确定这是唯一/最好的解决方案。请让我知道是否有人有其他解决方案。

Gary