由于我无法访问nVIDIA卡,因此我使用GPUOcelot来编译和运行我的程序。由于我在两个单独的文件中分离出我的cuda内核和C ++程序(因为我使用的是C ++ 11特性),我正在执行以下操作来运行我的程序。
'OcelotConfig -l
'我最近获得了一个拥有nVIDIA卡的Windows盒子。我下载了用于windows和mingw g ++的CUDA工具包。现在我跑
现在调用nvcc而不是生成my_kernel.o会生成my_kernel.obj。当我尝试链接它们并像之前一样使用g ++运行时
我收到以下错误:
my_kernel.obj: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 status
你能解决这个问题吗?感谢。
答案 0 :(得分:2)
nvcc是一个编译器包装器,它可以调用设备编译器和主机编译器(它也可以调用主机链接器,但是你使用的是-c
所以不进行链接)。在Windows上,支持的主机编译器是Visual Studio中的cl.exe。
通常无法链接使用两个不同C ++编译器创建的两个目标文件,即使您只是使用CPU。这是因为ABI不同。您看到的错误消息只是告诉您cl.exe(通过nvcc)的目标文件格式与g ++不兼容。
您需要使用cl.exe编译my_main.cpp
,如果这会产生错误,那么这是一个不同的问题!