CUDA编译器对象可执行

CUDA Compiler Object to Executable

本文关键字:可执行 对象 编译器 CUDA      更新时间:2023-10-16

我正在尝试获取使用命令行进行编译的CUDA应用程序,但我有麻烦。

我知道运行命令

nvcc -ccbin "C:Program Files (x86)Microsoft Visual Studio 14.0VCbin" -c -D_DEBUG -DWIN32 -D_CONSOLE -D_MBCS -Xcompiler /EHsc,/W3,/nologo,/Od,/Zi,/MTd -o test.obj test.cu

从我的批处理文件中生成一个OBJ文件,我需要使用链接器来制作可执行文件。我在Visual Studio上遇到了不可修复的问题,所以我试图避免使用它,但是我不知道如何完成编译程序。

我需要知道的是:我该如何处理对象文件才能到达可执行文件我可以实际运行的可执行文件?

假设您的test.cu是一个完整的应用程序(例如具有main函数等(,对您的命令行的两个更改可能是删除-c Switch并更改-o交换机以指定指定典型的Windows文件可执行名称,例如test.exe,即-o test.exe

以下测试案例在Windows 7,CUDA 8和VS 2015上演示了这一点:

C:UsersbobDocuments>type test.cu
#include <stdio.h>
__global__ void t(){
  printf("hellon");
}
int main(){
  t<<<1,1>>>();
  cudaDeviceSynchronize();
  printf("%sn", cudaGetErrorString(cudaGetLastError()));
  return 0;
}
C:UsersbobDocuments>nvcc -ccbin "C:Program Files (x86)Microsoft Visual Studio 14.0VCbin" -D_DEBUG -DWIN32 -D_CONSOLE -D_MBCS -Xc
ompiler /EHsc,/W3,/nologo,/Od,/Zi,/MTd -o test.exe test.cu
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-depreca
ted-gpu-targets to suppress warning).
test.cu
   Creating library test.lib and object test.exp
C:UsersbobDocuments>test
hello
no error
C:UsersbobDocuments>

请注意,即使是-o开关的更改也不是严格必要的。此开关仅指定输出文件 name ,并且对实际编译流(在这种情况下是由-c Switch的存在或不存在所控制的(。您可以通过将-o开关按原样留下来证明自己。然后,您将拥有一个名为test.obj的可执行文件,您可以通过在命令提示符下键入test.obj来证明自己。它将以与上面显示的输出相同的输出执行。

但它可能令人困惑,并且不是Windows的典型文件命名约定。