编译CUDA cuSolver特征值示例代码时出现编译错误求助
排查解决建议
- 调整头文件与宏定义顺序
报错明确提示IDX2F宏定义在diag.cpp第17行,但代码第12行就引入了依赖该宏的util.hxx,宏定义晚于被调用位置导致报错。将#define IDX2F(i,j,lda) ((((j)-1)*((size_t)lda))+((i)-1))这行代码移动到#include "util.hxx"的前面,再重新编译。 - 补充缺失的函数/宏声明
imax、imin未声明的问题可通过两种方式解决:- 代码修改:在
diag.cpp引入util.hxx的代码前补充如下内容
#include <algorithm> #define imax(a,b) std::max(a,b) #define imin(a,b) std::min(a,b)- 编译参数添加:无需修改代码,直接在编译命令中传入宏定义
nvcc -ccbin gcc -I/usr/local/cuda/include -Dimax="std::max<int>" -Dimin="std::min<int>" -c diag.cpp -o diag.o - 代码修改:在
- 临时添加兼容参数验证环境
按照报错提示,添加-fpermissive参数让G++暂时兼容这类未声明写法,验证是否存在其他环境问题:nvcc -ccbin gcc -I/usr/local/cuda/include -fpermissive -c diag.cpp -o diag.o - 使用本地CUDA示例目录的完整代码
网页单独拷贝的示例代码往往缺公共依赖配置,你可以直接进入本地CUDA安装路径的示例目录,路径通常为/usr/local/cuda/samples/7_CUDALibraries/,找到对应cuSolver示例,直接执行make即可完成编译,无需手动调整编译配置。 - 核对编译器版本匹配
执行gcc --version和nvcc --version确认实际调用的编译器版本,避免环境变量异常导致调用了不兼容的gcc版本。
内容的提问来源于stack exchange,提问作者Loki-Freya
相关产品推荐
相关产品推荐

