2015-12-21 5 views
0

我在開始使用Opencl時非常麻煩,主要是因爲我的編譯器拒絕識別相關庫的存在。我從their website下載了最新版本的AMD SDK,並進行了完整安裝。我想通過this blog來學習,我的大部分信息都是從那裏得到的。麻煩連接AMD SDK opencl

首先,我檢查了我的系統路徑變量,它包含了amd api的64位bin文件夾。

我開始嘗試使用明顯是標準選項-lOpenCl的make文件進行編譯,但它只是告訴我它找不到-lOpenCl或CL \ cl.hpp。於是我添加了-I %AMDAPPSDKROOT%\include,這固定了我的問題的一半,但仍然(三個小時並計數)編譯器抱怨未定義的引用,同時拒絕識別任何相關的庫。

g++ -std=c++1y -g -o .\bin\test.exe .\quicktest.cpp -I .\Libraries -I .\Scource -I "%AMDAPPSDKROOT%\include" -L "%AMDAPPSDKROOT%\bin\x86_64" -L "%AMDAPPSDKROOT%\lib\x86_64" -LlibOpenCl.a是我現在正在編譯的命令,它已經消除了所有問題,但未定義的函數參考如clGetPlatformclReleaseCommandQueue。我使用與OpenCl blog中的第一個示例完全相同的代碼,除了我還包含vector

我已經嘗試了不同的組合加載,並從互聯網的建議,但沒有任何工作到目前爲止。有什麼我失蹤/不明白?我真的很想繼續學習,並非常感謝任何幫助。老實說,我不確切知道哪些信息會有幫助,但是如果這有助於我使用Geforce GT 635運行64位Windows 7計算機,並且我已經安裝了CUDA和AMD SDK。

+0

我可能有一個解決方案,我要休息一下,雖然 – user4578093

回答

3

看着你如何編譯它似乎-LlibOpenCl.a是錯誤的。 -L用於庫目錄,而-l用於單個庫。要使用-l,必須刪除庫名稱前面的lib,並刪除點後面的內容。就你的情況而言,它應該是-lOpenCl,正如你在開始時所說的那樣。

libOpenCl在這兩個目錄之一中? : %AMDAPPSDKROOT%\ BIN \ x86_64的 %AMDAPPSDKROOT%\ LIB \ x86_64的

我想第一個是二進制和他第二個用於庫,以便第一個應該是無用的。由於您尚未鏈接庫,因此您在鏈接期間獲取未定義的引用。

+0

幾個不同的消息人士稱,這是要走的路,但該文件的名稱被改變了好像巫術給我,所以我選擇只是寫出我的編譯完整的文件名。感謝你明確地說明了這一點,但是當我在尋找答案時,我看到了類似的東西,但從來沒有說過,lib必須從名稱中刪除,所以我忽略了它。 – user4578093

0
g++ -std=c++1y -g -o .\bin\test.exe .\quicktest.cpp -I .\Libraries 
-I .\Scource -I "%AMDAPPSDKROOT%\include" "%AMDAPPSDKROOT%\lib\x86\libOpenCl.a" 

​​通過指定完整的文件路徑,幷包括相同的語義文件就好像它是一個對象文件我得到了我的項目編譯,我還使用了庫的32位版本,而不是64的bit版本。