2

我对 Mac OS X 完全陌生,我购买新 MacBook Pro R15 Retina 版的主要原因是开始学习 CUDA API。

但我无法构建我的项目。

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

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

其他链接器标志:-lcuda、-lcudart

标头搜索路径:/usr/local/cuda/include

库搜索路径:/usr/local/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/构建/产品/调试

-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:找不到文件:@rpath/CUDA.framework/Versions/A/CUDA for architecture x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

奇怪的是,当我转到所描述的路径时,我看到了 CUDA 可执行文件。文件在那里!

当我使用使用该库的 cuComplex.h 时,每一个数学表达式(例如 log、cos、sin 等)都是一个“未定义的变量”。但是,cuComplex.h 库中包含库。

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

4

4 回答 4

6

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

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 似乎无法识别 /Library/Frameworks 下的 CUDA.framework。原因不明。您必须自己将其添加到您的项目中。

在您的项目属性页面中,单击 Build Phases -> Link with Libraries。选择 CUDA.framework。如果它没有出现在列表中,请使用“添加其他”添加它。这样你就可以把它联系起来。

如果您正在编写 Makefile,您希望添加它以完全自动化链接阶段:

-F/Library/Frameworks -framework CUDA
于 2012-08-11T10:23:34.990 回答
0

我在使用 Xcode 6.1 的 OS X 10.10 上编译 CUDA 6.5 示例时遇到了同样的问题。问题发生在 Makefiles 包含以下行的示例中:

ALL_LDFLAGS += -Xlinker -framework -Xlinker CUDA

解决方法是告诉链接器有关 /Library/Frameworks 的信息,以便将上面的内容替换为 2 行:

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

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

于 2014-12-16T22:14:26.120 回答
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 命令粘贴到您的终端中。

于 2014-12-16T17:59:33.010 回答
0

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

LDFLAGS += -Xlinker -F/Library/Frameworks
于 2016-10-12T11:15:58.673 回答