c++ - NVCC,与 -Xcompiler 的奇怪交互

标签 c++ cuda compilation compiler-errors

我正在尝试构建 Magma,但我遇到了一些问题,我很确定我在使用早期版本的 CUDA 时没有遇到过这些问题。 (我现在使用的是 6.5)。发生的是 makefile 生成以下命令:

nvcc -fPIC -O3 -DADD_ -Xcompiler -fno-strict-aliasing  -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -I/opt/cuda/include -I../include -I../control -I../sparse-iter/include -c zgemv_conjv.cu -o zgemv_conjv.o
nvcc fatal   : Unknown option 'fPIC'

Google 显示 -fPIC 只能与 -Xcompiler 一起使用,因为它不是 nvcc 选项。但如您所见,我的 nvcc 命令中确实有 -Xcompiler。

我试过像这样将 -fPIC 放在 -Xcompiler 后面:

nvcc -O3 -DADD_ -Xcompiler -fPIC -fno-strict-aliasing  -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -I/opt/cuda/include -I../include -I../control -I../sparse-iter/include -c zgemv_conjv.cu -o zgemv_conjv.o
nvcc fatal   : Unknown option 'fno-strict-aliasing'

它在下一个非 nvcc 选项上失败,即使它在 -Xcompiler 之后。这是有效的:

nvcc -O3 -DADD_ -Xcompiler -fno-strict-aliasing -Xcompiler -fPIC -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -I/opt/cuda/include -I../include -I../control -I../sparse-iter/include -c zgemv_conjv.cu -o zgemv_conjv.o

我在哪里复制了 -Xcompiler 开关。 有谁知道这是否是预期的行为?我找不到任何关于它的引用或文档,而且我很确定它不像以前版本的 CUDA 那样工作。会不会是一个错误?

最佳答案

根据 this ,您必须用逗号分隔不同的 -Xcompiler 子选项,或者您必须为每个选项使用单独的 -Xcompiler,就像您在上次尝试中所做的那样。看起来这是故意的。

关于c++ - NVCC,与 -Xcompiler 的奇怪交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674885/

相关文章:

maven - 编译 nativetoascii maven 插件

c++ - 从 C++ 设置变量时 QML 内存泄漏

c++ - 在 C++ 中取消链接与删除

c++ - 显式模板实例化示例

c++ - Visual C++ 关心函数参数中的数组大小。那是对的吗?

opencv - EmguCV - 找不到 nvcuda.dll

c - 每个.h文件都有一个对应的目标文件吗?

c++ - 如何在不复制的情况下从 N 维容器中获取可迭代范围?

用于常量内存变量使用的 CUDA 5.0 命名空间

c++ - 使用纳秒与 boost :posix_time