2013-03-27 108 views
0

我試圖讓我的問題解決了幾個小時,但我沒有找到任何有用的提示。希望你們能幫助我了:鏈接問題(英特爾SDK)OpenCL和Code :: Blocks

一些有用的數據:
操作系統:Windows 8普通版64位
庫:英特爾OpenCL的SDK
編譯:MinGW的(-GCC)(最新版本)
IDE:代碼: :塊(最新版本)

最小不工作代碼:

#include <stdlib.h> 
#include <CL/cl.h> 

int main(void) 
{ 
    cl_uint available; 
    cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id)); 
    cl_int result = clGetPlatformIDs(1, platforms, &available); 
    free(platforms); 
    if(result == CL_SUCCESS)  
    return 0;  
    return -1; 
} 

代碼:: Blocks的全局編譯設置:
鏈接器設置:添加到英特爾OpenCL.lib([...] \ Intel \ OpenCL SDK \ 3.0 \ lib \ x64 \ OpenCL.lib)的路徑(嘗試使用其他選項以及-OpenCL)
Search-編譯器目錄:英特爾OpenCL-SDK的路徑包括目錄([...] \ Intel \ OpenCL SDK \ 3.0 \ include)
鏈接器的搜索目錄:英特爾OpenCL-Lib目錄的路徑([...]英特爾\ OpenCL的SDK \ 3.0 \ LIB \ x64)的

內建日誌:

mingw32-g++.exe -L"[...]\Intel\OpenCL SDK\3.0\lib\x64" -o bin\Release\openCLTest.exe  obj\Release\main.o -s "[...]\Intel\OpenCL SDK\3.0\lib\x64\OpenCL.lib" 
obj\Release\main.o:main.c:(.text.startup+0x39): undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minutes, 0 seconds) 
1 errors, 0 warnings (0 minutes, 0 seconds) 

我不知道他爲什麼沒有正確鏈接。 我修改了文本以縮短路徑,通常它會是「C:\ Program Files(x86)...」。

希望你們能幫助我!這真是令人沮喪! :(
你需要更多的信息

編輯:
好了...一小時,我解決我自己的問題
希望這個提示可以幫助一些其他的脂肪酶:
我不得不額外鏈接對X86庫(似乎有些功能沒有在X64中實現)
相關知識 - - '''

+0

請添加您的解決方案作爲問題的答案。您稍後可以接受它,這標誌着問題已經解決。解決標題不適用於堆棧溢出。 – talonmies 2013-03-29 07:39:56

+1

值得注意的是,它沒有工作的實際原因是因爲您使用的是32位MinGW,所以64位庫無法讀取。所有函數都在x64中實現,你只需要一個64位編譯器來使用它們;) – Thomas 2013-03-29 07:51:36

回答

0

我得到同樣的問題,我努力想弄出解決方案,最後我做了:)

首先,我的硬件是英特爾處理器英特爾(R)酷睿TM i5-2500 CPU @ 3.30GHz和英特爾(R)高清顯卡,然後在更新驅動程序後安裝了英特爾OpenCL SDK 1.2。從那以後,我配置代碼::塊爲新的路徑包括文件夾,如下面的鏈接中提到lib文件夾:http://www.obellianne.fr/alexandre/tutorials/OpenCL/tuto_opencl_codeblocks.php

然後我試圖編譯的例子,我得到了連接問題,如下所示:

opencl.o(.text+0x6f):opencl.c: undefined reference to `[email protected]' 
opencl.o(.text+0xa7):opencl.c: undefined reference to `[email protected]' 
opencl.o(.text+0x142):opencl.c: undefined reference to `[email protected]' 
opencl.o(.text+0x263):opencl.c: undefined reference to `[email protected]' 
collect2: ld returned 1 exit status 
Process terminated with status 1 (0 minutes, 0 seconds) 
4 errors, 0 warnings (0 minutes, 0 seconds) 

我試圖使用命令行,我得到了同樣的錯誤,然後我試圖卸載英特爾sdk並將其替換爲AMD sdk 2.8,它支持具有SSE(由英特爾設計的流式SIMD擴展)2的X86 CPU 2。X orlater

http://developer.amd.com/tools-and-sdks/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/system-requirements-driver-compatibility/

最後工程:)

我希望你覺得這條評論有用。

0

根據外部消息來源,我偶然發現了我自己對這個問題的啓示,我發現了mingw-w64連接器其實有些問題。 mingw-w64的ld.exe不想與標準的libopencl.a鏈接,不管這是intel SDK的具體還是不知道,但這裏是鏈接到解決方案。

http://sourceforge.net/p/mingw-w64/support-requests/46/

你只需要而不是鏈接到提供libopencl.a默認之一。

仍然不知道爲什麼鏈接器給出了一個問題,但我已經驗證瞭解決方案確實(如何)解決問題。