将问题与(英特尔SDK)OpenCL和Code :: Blocks联系起来

时间:2013-03-27 09:59:57

标签: opencl linker-errors codeblocks

我试图让我的问题解决好几个小时,但我没有找到任何有用的提示。希望你们可以帮助我:

一些有用的数据:
操作系统:Windows 8 Basic 64位
库:英特尔OpenCL SDK
编译器:MinGW(-gcc)(最新版本)
IDE:Code :: Blocks(最新版本)

最小不工作代码:

#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;
}

代码::阻止全局编译器设置:
链接器设置:添加了英特尔OpenCL.lib([...] \ Intel \ OpenCL SDK \ 3.0 \ lib \ x64 \ OpenCL.lib)的路径(尝试-lOpenCL作为其他选项)
编译器的搜索目录:Intels的路径OpenCL-SDK包括目录([...] \ Intel \ OpenCL SDK \ 3.0 \ include)
链接器的搜索目录:Intels的路径OpenCL-Lib目录([...] \ Intel \ OpenCL SDK \ 3.0 \ lib \ x64)

Build-Log:

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 `clGetPlatformIDs@12'
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中实现)。
很高兴知道-.-'''

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我努力找出解决方案,最后我做了:)

首先,我的硬件是Intel处理器Intel(R)Core(TM)i5-2500 CPU @ 3.30GHz和Intel(R)HD Graphics,然后在更新驱动程序后安装了Intel OpenCL SDK 1.2。之后,我将code :: blocks配置为include文件夹和lib文件夹的新路径,如以下链接所示:http://www.obellianne.fr/alexandre/tutorials/OpenCL/tuto_opencl_codeblocks.php

然后我尝试编译示例,并将链接问题解决如下:

opencl.o(.text+0x6f):opencl.c: undefined reference to `clGetPlatformIDs@12'
opencl.o(.text+0xa7):opencl.c: undefined reference to `clGetDeviceIDs@24'
opencl.o(.text+0x142):opencl.c: undefined reference to `clGetDeviceInfo@20'
opencl.o(.text+0x263):opencl.c: undefined reference to `clGetDeviceInfo@20'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 0 warnings (0 minutes, 0 seconds)

我尝试使用命令行,我得到了相同的错误然后我尝试卸载Intel sdk并将其替换为AMD sdk 2.8,它支持带有SSE的X86 CPU(由Intel设计的流式SIMD扩展)2.x orlater

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

最后它有效:)

我希望你发现这个评论很有用。

答案 1 :(得分:0)

根据一个外部消息来源,我偶然发现了我自己的启蒙之路,我发现mingw-w64链接器实际上有些错误。 mingw-w64的ld.exe不希望链接到标准的libopencl.a ..这是不是特定于intel SDK还是不确定但是这里是解决方案的链接。

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

你只需要链接到提供的libopencl.a而不是默认的。

仍然不知道为什么链接器会出现问题,但我已经验证解决方案(某些方法)可以解决问题。