在 CentOS 上编译 LLVM 源码
在公司使用llvm开发编译器,刚入门,尝试在一个CentOS系统上编译llvm的源码,本文是对过程的简要记录以及遇到的一些问题的记录。
操作步骤
下载llvm库
1 | cd /home/PWE/ |
开始构建
1 | cd llvm-project |
说明
- cmake 这一步,只指定了构建类型和允许编译子项目,构建类型不指定时默认也是 Debug,可省略;另外没有指定安装路径,所以会安装到默认路径
/usr/local,如果需要指定,则使用-DCMAKE_INSTALL_PREFIX="../install_path/";其他参数请参考官网。 - cmake 这一步,我使用了 ninja 作为构建工具,因为 llvm 官网推荐用 ninja,如果要使用 gnu make 或其他工具,请参考官网。
遇到问题
提示缺少 cmake
解决:安装 cmake,
sudo yum install cmake,之后重新执行时,提示我 cmake 的版本过低,需要至少3.4版本,于是从网上下载了 cmake 的源码,卸载低版本 cmake,修改环境变量指向高版本 cmake,参考:https://www.jianshu.com/p/b283fad5e4de提示缺少 Ninja:
CMake Error: CMake was unable to find a build program corresponding to “Ninja”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
解决: 安装 Ninja,按照要求编译:
./configure.py --bootstrap,之后把路径下生成的ninja复制到/usr/local/bin下边,参考:https://ninja-build.org/。注意在编译 ninja 之前需要安装re2c,GLIBCXX_3.4.21。安装re2c稍微麻烦一些,下载源码后,编译安装,参考:https://www.24kplus.com/linux/549.html。提示 gcc 版本过低,要求 5.1 以上版本
解决: 安装高版本 gcc,源码编译安装。当时这个问题困扰了我很久,原因是编译 gcc 升级高版本这件事本身就陷阱重重,编译过程中遇到不少问题,后来也没有成功。最后的解决方案是安装了高版本的 CentOS,之前是 6.9,后来改成了 8,CentOS 8 上自带的 gcc 是 8.2.1 版本,问题自然解决。
提示缺少高版本的 GLIBCXX
ninja: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found (required by ninja)
ninja: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20’ not found (required by ninja)
解决: 因为在升级 gcc 之后,没有更新新版本的动态库。将编译新版本 gcc 的路径下的 lib64 中的 libstdc++.so.6.0.21 复制到
/usr/lib64/下边,然后修改下边的软链接到这个库ln -s libstdc++.so.6.0.21 libstdc++.so.6。参考:https://itbilu.com/linux/management/NymXRUieg.html
封面图片:Photo by Samsung Memory on Unsplash
文章同步发布在 CSDN:在CentOS系统上编译llvm源码










