2012-07-24 35 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