我正在使用Nvidia GPU计算工具包的Windows 7 x64与64位Cygwin软件包和Eclipse。(我使用内部构建工具,因为GNU不喜欢Windows路径中的冒号。)我的代码:
下面是相当基本的代码:#include #include使用命名空间std;
int main() {
cl_int error = 42;
cl_platform_id platform;
error = clGetPlatformIDs(1, &platform, NULL);
return 0;
}
C++代码编译和运行都很好,我可以使用OpenCL头以及cl_int
和cl_device_id
,但是对于clGetPlatformID
,我得到了以下编译错误:
relocation truncated to fit: R_X86_64_32 against symbol
'__imp_clGetPlatformIDs' defined in .idata$5 section in
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\lib
\x64/OpenCL.lib(OpenCL.dll.b)
我尝试了以下几点:
我猜想应该归咎于内部构建器,但是使用它是导致构建失败的另一个问题的解决方案。
发布于 2014-06-13 12:22:49
我有一些关于这个的最新消息:
擦除和重新安装几乎所有的东西(CUDA工具包,Cygwin,Eclipse),它仍然给我同样的错误,即使使用适当的标志(我使用之前,船长明显链接到一个帖子,建议它)。
我所取得的进展是,我很可能已经把注意力集中在问题的所在上了。使用相对路径解决了GNU的问题,使得无法处理路径中的冒号。这基本上清除了Eclipse内部构建器。不过,我在另一台机器上使用了几乎完全相同的设置,不同之处在于,这个设置有一个AMD卡,因此使用的是App,而不是Nvidia的OpenCL工具包。
我怀疑这可能是最近发布的CUDA工具包6.0版带来的一个bug,因为它引入了一些非常重要的升级,比如统一内存,如果没有NSight,他们可能无法很好地测试它。毕竟,他们建议您使用带有该插件的Visual进行开发,而我现在还没有(合法)访问Visual的权限。
编辑:我已经证实了很多.在Nvidia GPU机器上安装了App,它运行得完美无缺,所以似乎Nvidia实际上已经在CUDA工具包的第6版中搞砸了OpenCL。你知道他们正在和OpenCL竞争,我不觉得这很令人惊讶。
发布于 2017-02-27 16:06:56
我也犯了同样的错误,最后我解决了这个问题,最近我所做的是:
1)在cygwin中,安装所有名为opencl
的包。
2)接下来,在...\cygwin\etc\OpenCL\vendors\
(我在那里找到了pocl.icd )中创建nvidia.icd
并放置一个字符串“/cygdrive/c/pocl.icd/System32 32/nvopencl.dll”。对于英特尔的OpenCL驱动程序,也可以做类似的操作。
3)最后不要犯CMake文件中的错误(就像我做的那样)。工作代码示例:
cmake_minimum_required(VERSION 3.6)
set(MODULE_NAME opencl-test)
project(${MODULE_NAME})
set(CMAKE_CXX_STANDARD 14)
find_package(OpenCL)
# set include directories
include_directories(${OpenCL_INCLUDE_DIRS})
# set source files
set(SOURCE_FILES main.cpp)
add_executable(${MODULE_NAME} ${SOURCE_FILES})
# linking
target_link_libraries(${MODULE_NAME} ${OpenCL_LIBRARY})
https://stackoverflow.com/questions/24189414
复制相似问题