编译一个不支持c++11和.cxx文件的cuda代码需要一个带有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库。我回答了一个特定图书馆特有的问题。
我正在修改这个问题,以便把它当作一个一般性问题来处理。问题主要是如何编译不支持-std=c++11的cuda版本和需要std=c++11功能的.cxx文件。
例如,如果你查看vexcl教程,有一个教程程序同时使用了thrt.cu和thrt.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
但要与图书馆建立适当的联系。
这就是我解决问题的方法
首先,Throt-sort.cu和Throt-sort.cpp是同一程序的一部分。这些被拆分是因为nvcc在版本7(刚刚发布)之前不支持C++11。因此,您需要编译这两者(使用-c
标志),然后将它们链接在一起。其次,在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应该可以开箱即用地处理这些问题。
相关文章:
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是
- 如何在 C++11 中使用 tinyutf8 在另一个utf8_string中找到utf8_string?
- 目标c是否需要一个标准来定义像c++11这样的内存模型
- 从c++11 time_t创建一个可转换为.net DateTime的字符串
- C++11,仅将一个字段复制到向量中
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?
- C++11 中的随机数:有没有一种简单的方法可以将生成器种子放在代码的一个位置,然后在不同的函数中使用它?
- 直接X 11:在屏幕上绘制一个简单的彩色矩形
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 静态库中只有一个C 11 Singleton的实例
- 在 Ubuntu 12.04 上运行,一个在 Windows 上的 MS Visual Studio 中用 c++11
- C++ 11:线程创建给我一个"Attempt to use a deleted function"错误
- 您好,这个简单的C 脚本在第11行中弹出了一个错误.有人知道如何修复它吗?
- 在C 11中生成一个随机字符串
- 带钥匙的C 11地图定义了一个值范围
- 我可以创建一个可以接受任何枚举的模板(非类型)param类吗?C 11