编译不支持 c++11 的 cuda 代码和 .cxx 文件需要带有 vexcl 示例的 c++11
Compiling a cuda code which does not support c++11 and a .cxx file requires a c++11 with an vexcl example
我是 gpu 技术的新手,正在探索使用 OpenCL 和 cuda 进行 GPU 计算的 vexCL 库 backend.I 问了一个特定于特定库的问题。
我正在修改问题,以便将其视为一般性问题。问题基本上是如何编译不支持 -std=c++11 的 cuda 版本和需要 std=c++11 功能的 .cxx 文件。
例如如果您查看 vexcl 教程,则有一个使用 thrust.cu 和 thrust.cpp 的教程程序。现在我已经解决了,我只想在下面的段落中提到解决它的方法:
1) 首先编译.cpp 文件,例如
g++ -c -std=c++11 -o ts1.o -I${VEXCL_ROOT} -I${CUDA_INCLUDES} -DVEXCL_BACKEND_CUDA thrust-sort.cpp
2) 并编译 .cu 文件
nvcc -c -o ts2.o thrust-sort.cu
3) 一起编译目标文件
nvcc -o ts ts1.o ts2.o -lboost_system -lboost_filesystem -lcuda
但与库正确链接。
我就是这样解决问题的
首先,thrust-sort.cu和thrust-sort.cpp是同一个程序的一部分。将它们拆分是因为 nvcc 直到版本 7(刚刚发布)不支持 C++11。所以你需要编译这两个(使用 -c
标志)然后 link 它们一起。其次,您不能在 vexcl 中的同一个二进制文件中混合后端。而且,由于这个特定示例使用推力,后端必须是 CUDA。所以编译命令应该是
g++ -c -std=c++11 -o ts1.o -I${VEXCL_ROOT} -I${CUDA_INCLUDES} -DVEXCL_BACKEND_CUDA thrust-sort.cpp
nvcc -c -o ts2.o thrust-sort.cu
nvcc -o ts ts1.o ts2.o -lboost_system -lboost_filesystem -lcuda
随库一起提供的 CMakeLists.txt 应该可以立即为您处理这些问题。
我是 gpu 技术的新手,正在探索使用 OpenCL 和 cuda 进行 GPU 计算的 vexCL 库 backend.I 问了一个特定于特定库的问题。
我正在修改问题,以便将其视为一般性问题。问题基本上是如何编译不支持 -std=c++11 的 cuda 版本和需要 std=c++11 功能的 .cxx 文件。
例如如果您查看 vexcl 教程,则有一个使用 thrust.cu 和 thrust.cpp 的教程程序。现在我已经解决了,我只想在下面的段落中提到解决它的方法:
1) 首先编译.cpp 文件,例如
g++ -c -std=c++11 -o ts1.o -I${VEXCL_ROOT} -I${CUDA_INCLUDES} -DVEXCL_BACKEND_CUDA thrust-sort.cpp
2) 并编译 .cu 文件
nvcc -c -o ts2.o thrust-sort.cu
3) 一起编译目标文件
nvcc -o ts ts1.o ts2.o -lboost_system -lboost_filesystem -lcuda
但与库正确链接。
我就是这样解决问题的
首先,thrust-sort.cu和thrust-sort.cpp是同一个程序的一部分。将它们拆分是因为 nvcc 直到版本 7(刚刚发布)不支持 C++11。所以你需要编译这两个(使用 -c
标志)然后 link 它们一起。其次,您不能在 vexcl 中的同一个二进制文件中混合后端。而且,由于这个特定示例使用推力,后端必须是 CUDA。所以编译命令应该是
g++ -c -std=c++11 -o ts1.o -I${VEXCL_ROOT} -I${CUDA_INCLUDES} -DVEXCL_BACKEND_CUDA thrust-sort.cpp
nvcc -c -o ts2.o thrust-sort.cu
nvcc -o ts ts1.o ts2.o -lboost_system -lboost_filesystem -lcuda
随库一起提供的 CMakeLists.txt 应该可以立即为您处理这些问题。