首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Nvidia GPU计算工具包和使用Eclipse Cygwin编译错误

使用Nvidia GPU计算工具包和使用Eclipse Cygwin编译错误
EN

Stack Overflow用户
提问于 2014-06-12 16:26:48
回答 2查看 499关注 0票数 0

我正在使用Nvidia GPU计算工具包的Windows 7 x64与64位Cygwin软件包和Eclipse。(我使用内部构建工具,因为GNU不喜欢Windows路径中的冒号。)我的代码:

下面是相当基本的代码:#include #include使用命名空间std;

代码语言:javascript
运行
复制
int main() {
    cl_int error = 42;
    cl_platform_id platform;

    error = clGetPlatformIDs(1, &platform, NULL);

    return 0;
}

C++代码编译和运行都很好,我可以使用OpenCL头以及cl_intcl_device_id,但是对于clGetPlatformID,我得到了以下编译错误:

代码语言:javascript
运行
复制
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)

我尝试了以下几点:

  • 卸载/重新安装Cygwin工具
  • 卸载/重新安装Nvidia GPU计算工具包中的32位和64位库
  • 卸载/重新安装Eclipse并检查大多数设置
  • 通过添加"-mcmodel=medium“或"-mcmodel=large”来避免32位内存限制。(根据搜索,在某个时刻,32位和64位二进制文件是混合的。)
  • 确认我只使用64位Nvidia库和Cygwin工具。

我猜想应该归咎于内部构建器,但是使用它是导致构建失败的另一个问题的解决方案。

EN

回答 2

Stack Overflow用户

发布于 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竞争,我不觉得这很令人惊讶。

票数 1
EN

Stack Overflow用户

发布于 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文件中的错误(就像我做的那样)。工作代码示例:

代码语言:javascript
运行
复制
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})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24189414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档