c++ - 构建一个使用 boost 的 .cu 文件

标签 c++ boost cuda nvcc noncopyable

我运行了以下命令:

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

谷歌搜索引导我 here .

所有的希望似乎都破灭了,直到this guy使用了解决方法。 虽然,作为初级程序员,我不明白他的意思

Built boost from source with g++11 open solved the problem

这是否意味着从头开始重建 boost?它与默认构建 boost 有何不同?

那么在同一个项目中同时使用 CUDA 和 CUDA 的实际解决方法是什么?

最佳答案

主机代码使用:

在使用 CUDA 工具链构建第 3 方库时,唯一成功概率较高的通用解决方法是安排您的项目,使第 3 方代码位于以 .cpp 结尾的文件中,并由主机编译器(例如,Linux 上的 g++,Windows 上的 cl.exe)。

您的 CUDA 代码(例如内核等)需要位于文件名以 .cu 结尾的文件中(用于默认处理行为)。

如果您需要在 .cu 文件中的函数中使用此第 3 方代码/库功能,则需要在 .cpp 文件中构建包装函数以提供必要的行为作为可调用函数,然后根据需要从您的 .cu 文件中调用这些包装函数。

在项目级别将所有这些链接在一起。

具体问题具体分析后,可能还可以采取其他方法。例如,有时更新到最新版本的第 3 方库和/或 CUDA 版本可能会解决问题。

在设备代码中的使用:

没有通用的兼容性方法。如果您希望某些行为在设备代码中可用,并且您遇到了这样的编译错误,您将需要专门解决这个问题。

一般建议可能仍然适用,例如更新到您正在使用的第 3 方库的最新版本,和/或最新的 CUDA 版本。

关于c++ - 构建一个使用 boost 的 .cu 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58092790/

相关文章:

c++ - 在 VxWorks 中使用 Boost C++ 库时出错

cuda - 在 CUDA 中,我们如何调用另一个翻译单元中的设备函数?

memory-management - CUDA:与CPU的不同结果

c++ - 开源 RTP 混音器/翻译器 exe 或 sdk

c++ - 转移/减少 Bison 的冲突

c++ - 将文件读入字符串缓冲区并检测 EOF

logging - 什么是 Boost 日志 "debug output window"?

c++ - super 菜鸟 C++ 变量帮助

c++ - 如何启用父级和派生的_shared_from_this

vmware - VMware 上的 cuda 程序