0

我试图解决我的问题几个小时,但我没有找到任何有用的提示。希望大家能帮帮我:

一些有用的数据:
操作系统:Windows 8 Basic 64bit
库:Intel 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;
}

Code::Blocks 全局编译器设置:
链接器设置:添加了英特尔 OpenCL.lib 的路径([...]\Intel\OpenCL SDK\3.0\lib\x64\OpenCL.lib)(也尝试将 -lOpenCL 作为其他选项)
编译器的搜索目录:英特尔 OpenCL-SDK 包含目录的路径 ([...]\Intel\OpenCL SDK\3.0\include)
链接器的搜索-目录:英特尔 OpenCL-Lib 目录的路径 ([...]\ Intel\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 `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 中实现)。
很高兴知道 -。-'''

4

2 回答 2

0

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

首先我的硬件是 Intel Processor Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz 和 Intel(R) HD Graphics,然后我在更新驱动程序后安装了 Intel OpenCL SDK 1.2。之后,我将 code::blocks 配置为包含文件夹和 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(由 Intel 设计的 Streaming SIMD Extension)2.x 或更高版本的 X86 CPU

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

最后它起作用了:)

我希望你觉得这个评论有用。

于 2013-05-20T09:05:57.330 回答
0

根据一个外部消息来源,我偶然发现了我自己对这个问题的启蒙之路,我发现 mingw-w64 链接器实际上有问题。mingw-w64 的 ld.exe 不想与标准的 libopencl.a 链接。这是否是特定于英特尔 SDK 的我不确定,但这里是解决方案的链接。

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

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

仍然不知道为什么链接器会出现问题,但我已经验证该解决方案确实(以某种方式)解决了问题。

于 2013-07-25T21:47:40.353 回答