2012-07-24 38 views
2

我完全不熟悉Mac OS X,我购买新MacBook Pro R15 Retina Edition的主要原因是开始学习CUDA API。CUDA编程和xCode

但我不能让我的项目构建。

例如,当我创建一个新的CUDA项目,我去项目属性并进行以下修改:

编译器C/C++/Objective-C的:LLVM GCC 4.2

其他链接国旗:-lcuda,-lcudart

头文件搜索路径:在/ usr /本地/ CUDA /包括

库搜索路径:在/ usr /本地/ CUDA/lib目录

当我开始在我的代码中添加必要的库时,一切运行良好。我的代码没有输入错误。

当我生成项目,我得到的链接错误(路径缩短,消息分解为便于阅读):

Ld /my_test_project/Build/Products/Debug/test normal x86_64 cd /Users/Admin/Documents/test setenv MACOSX_DEPLOYMENT_TARGET 10.7 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++

-arch x86_64

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk

-L/my_test_project/Build/Products/Debug

-L/usr/local/cuda/lib -F/my_test_project/Build/Products/Debug

-filelist /my_test_project/Build/Intermediates/test.build/Debug/test.build/Objects-normal/x86_64/test.LinkFileList

-mmacosx-version-min=10.7

-lcudart

-lcuda

-o /my_test_project/Build/Products/Debug/test

ld: file not found: @rpath/CUDA.framework/Versions/A/CUDA for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

有什么奇怪的是,当我去描述的路径,我看到了CUDA可执行文件。该文件在那里!当我使用使用库的cuComplex.h时,每一个数学表达式(如log,cos,sin等等)都是一个“未定义的变量”。但是,cuComplex.h库里面有库。

驱动程序,SDK和工具包安装得很好,一切都像魅力一样。我可以使SDK示例工作。但我想我错过了一个细节,让整个事情工作。

+0

Hello Pierre-Luc,欢迎来到Stack Overflow。在创建CUDA项目时,是否为与您安装CUDA的体系结构(32位/ 64位)相同的体系结构创建它? – 2012-07-24 14:52:42

+0

嗨!谢谢您的回答 ! 是的,绝对。我已经在x64中安装了CUDA。即使我将属性“架构”设置为32位,并将“有效架构”设置为i386,也会出现相同的内容,但会显示“ld:file not found:@ rpath/CUDA.framework/Versions/A/CUDA for architecture i386” – 2012-07-24 15:05:26

+0

我甚至试过它在终端中编译。我得到完全相同的错误。 – 2012-07-24 15:09:54

回答

6

我在安装在Mountain Lion上的CUDA 5.0和Xcode 4.4.1有同样的问题。原因是libcuda.dylib将CUDA.framework与rpath链接起来,您可以使用它来检查它。

otool -L /usr/local/cuda/lib/libcuda.dylib 
/usr/local/cuda/lib/libcuda.dylib: 
/usr/local/cuda/lib/libcuda.dylib (compatibility version 1.1.0, current version 5.0.17) 
@rpath/CUDA.framework/Versions/A/CUDA (compatibility version 1.1.0, current version 5.0.17) 
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 

然而,Xcode中似乎并没有认识到在/库/框架CUDA.framework。原因不明。你必须自己添加到你的项目中。

在您的项目属性页面中,单击构建阶段 - >链接库。选择CUDA.framework。如果它没有出现在列表中,请使用“添加其他”添加它。这样你就可以把它链接起来。

如果你正在写Makefile中,要添加这种完全自动化链接阶段:

-F/Library/Frameworks -framework CUDA 
+0

嗨, 我也有错误作为皮埃尔吕克Delisle并试图通过添加CUDA.framework来克服这一点,正如你所说。现在,虽然我得到这样一个错误: LD:框架未发现CUDA 铛:错误:连接命令,退出代码1失败(使用-v看到调用) 请提前帮助和感谢... PS :我在Mac mini Mid 2010上运行Mac OS 10.8.2和XCode 4.5。 – 2012-09-27 16:19:33

+1

@MaxZ。如果添加两个标志,错误应该消失。 – stoictopia 2012-10-05 10:51:11

0

至于那工作了我的设置更是改变路径在libcuda这样一种替代方案:

sudo install_name_tool -change @rpath/CUDA.framework/Versions/A/CUDA \ 
    /Library/Frameworks/CUDA.framework/CUDA \ 
    /usr/local/cuda/lib/libcuda.dylib 

像往常一样,如果您不明白它的作用,请不要将sudo命令粘贴到终端中。

+0

如何撤销此命令? – 2016-08-06 13:24:30

+0

阅读install_name_tool-manual的手册 - 您需要将路径恢复为 – 2016-08-06 13:28:12

+0

。谢谢。只需将旧的和新的路径参数交换为-change选项即可。 – 2016-08-06 13:31:42

0

我在使用Xcode 6.1编译OS X 10.10上的CUDA 6.5示例时遇到了同样的问题。该问题发生在其生成文件包含的线的例子:

ALL_LDFLAGS += -Xlinker -framework -Xlinker CUDA 

此修复程序是讲述/库/框架的连接体,使得上述用2行替换:

ALL_LDFLAGS += -Xlinker -F/Library/Frameworks 
ALL_LDFLAGS += -Xlinker -framework -Xlinker CUDA 

据推测你的问题在这一点上得到了回答,但是这个页面几乎可以说是“ld:framework not found CUDA”的唯一谷歌结果,并且希望这可以为其他人节省一些时间。

0

编译示例文件时,我有与CUDA 8.0和OSX 10.12类似的CUDA链接问题。将以下内容添加到make文件解决了问题。

LDFLAGS += -Xlinker -F/Library/Frameworks