c++ - 构建一个使用 boost 的 .cu 文件
问题描述
我运行了以下命令:
nvcc -arch=sm_70 foo.cu -o predatorPrey -I $BOOST_ROOT -L $BOOST_LIBRARY_PATH -lboost_timer
并得到以下编译错误:
boost/include/boost/core/noncopyable.hpp(42): error: defaulted default constructor cannot be constexpr because the corresponding implicitly declared default constructor would not be constexpr
谷歌搜索把我带到了这里。
直到这家伙使用了一种变通方法,所有的希望似乎都落空了。虽然,作为初级程序员,我不明白他的意思
使用g ++ 11 open从源代码构建提升解决了这个问题
这是否意味着从头开始重建提升?它与默认构建 boost 有何不同?
那么在同一个项目中同时使用和 CUDA 的实际解决方法是什么?
解决方案
对于主机代码使用:
使用 CUDA 工具链构建第 3 方库时,唯一具有高成功概率的通用解决方法是安排您的项目,使第 3 方代码位于以 .cpp 结尾并由主机编译器处理的文件中(例如 linux 上的 g++,windows 上的 cl.exe)。
您的 CUDA 代码(例如内核等)需要位于文件名以 .cu 结尾的文件中(用于默认处理行为)。
如果您需要在 .cu 文件中的函数中使用此第 3 方代码/库功能,则需要在 .cpp 文件中构建包装函数以提供必要的行为作为可调用函数,然后调用这些.cu 文件中需要的包装函数。
在项目级别将所有这些链接在一起。
如果分析具体问题,可能会采取其他方法。例如,有时更新到最新版本的 3rd 方库和/或 CUDA 版本可能会解决问题。
在设备代码中使用:
没有通用的兼容性方法。如果您希望某些行为在设备代码中可用,并且遇到这样的编译错误,则需要专门解决该问题。
一般建议可能仍然适用,例如更新到您正在使用的 3rd 方库的最新版本,和/或最新的 CUDA 版本。
推荐阅读
- ruby-on-rails - 在不指定消息内容的情况下测试 assert_broadcast_on
- arrays - 多个结果的 Vlookup 最大值/最小值
- c++ - 可以将“bool”转换为“const char”错误并错位else错误c ++
- angular - 角度弹簧启动应用程序的错误 415 不受支持的媒体类型
- php - 在控制器中执行该方法一次并且不更新
- python - 检查输入时出现此错误错误:预期 conv2d_2_input 有 4 个维度,但在打开的 cv2 中得到了形状为 (717, 50, 50) 的数组
- arduino - 我可以以某种方式在按钮或模式中的某处将此代码添加到该代码中吗?
- blender - 有没有办法在搅拌机 2.8 2d 动画工作区中设置和更新背景图像?
- c++ - std::cout 的简约重新实现
- reactjs - 如何将令牌存储在 React 库的 LocalStorage 中