【CMake编译报错小复盘】CMAKE_CUDA_ARCHITECTURES,CMake version,GCC version问题

今天在写大模型量化推理框架时遇到了一些编译上的错误,简单复盘一下问题和解决方案:

问题1:CMAKE_CUDA_ARCHITECTURES

报错信息:

CMake Error: CMAKE_CUDA_ARCHITECTURES must be non-empty if set

cmake和cuda相关的报错通常都很"调虎离山"。

当出现这个报错时,本质问题并不是没有指定所谓的cuda architecture参数,而是找不到nvcc路径。

那么解决方案就是在环境变量中添加nvcc的路径:

bash 复制代码
export PATH="$PATH:/usr/local/cuda/bin"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda

然后source ~/.bashrc保存修改的内容,然后用如下命令检查一下是否生效:

参考资料:
CMake Error: CMAKE_CUDA_ARCHITECTURES must be non-empty if set

问题2:CMake版本过低

服务器上CMake版本过低:

这个好处理,直接用pip安装新版的cmake即可:

bash 复制代码
pip install cmake

问题3:GCC版本过低

服务器上默认的gcc版本非常低:

这个问题比较棘手,需要手动下载新版的gcc,然后激活新版的gcc以替换旧版本。比如现在服务器上下载好了多个版本的gcc:

我进入到11版本的文件夹中,然后执行如下命令激活:

bash 复制代码
source enable 

于是,查看当前的gcc的版本:

但是并没有这么顺利,我发现在编译时仍然会报错gcc版本过低。下面是我猜测的原因,我将gcc的路径打印(whereis gcc)出来,发现有多个路径,也许系统默认选择了第一个路径,也就是老版本。

于是我尝试在CMakeLists.txt的开头加上如下代码,作用是手动指定gcc的路径:

bash 复制代码
set(CMAKE_CXX_COMPILER /opt/rh/devtoolset-11/root/usr/bin/gcc)

然后编译了一次好像没生效,然后我再编译了一次,发现编译成功!

相关推荐
IdahoFalls18 小时前
QT-Windows Kits-版本问题:【“_mm_loadu_si64”: 找不到标识符】解决方案[NEW]
开发语言·c++·windows·qt·算法·visual studio
承渊政道18 小时前
【优选算法】(实战掌握分治思想的使用方法)
数据结构·c++·笔记·vscode·学习·算法·leetcode
南境十里·墨染春水18 小时前
C++传记 this指针 及区分静态非静态成员(面向对象)
开发语言·jvm·c++·笔记
揽月凡尘18 小时前
基于 SWIG 的 C++ Embind 绑定自动化技术说明
开发语言·c++·自动化
Yungoal18 小时前
C++基础项目结构
数据结构·c++·算法
扶摇接北海17618 小时前
洛谷:B4477 [语言月赛 202601] 考场安排
数据结构·c++·算法
IAUTOMOBILE18 小时前
Qt 入门级开发实践:浅析基于 QTtest 项目的 C++ GUI 编程基础
开发语言·c++·qt
羊小猪~~18 小时前
算法/力扣--字符串经典题目
c++·考研·算法·leetcode·职场和发展·哈希算法
临溟夜空的繁星18 小时前
C++ STL—— stack 和 queue
开发语言·c++
小年糕是糕手18 小时前
【35天从0开始备战蓝桥杯 -- Day7】
开发语言·jvm·数据库·c++·蓝桥杯