在公司使用llvm开发编译器,刚入门,尝试在一个CentOS系统上编译llvm的源码,本文是对过程的简要记录以及遇到的一些问题的记录。

操作步骤

下载llvm库

1
2
cd /home/PWE/
git clone https://github.com/llvm/llvm-project.git

开始构建

1
2
3
4
5
cd llvm-project
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" ../llvm
ninja && ninja install

说明

  • cmake 这一步,只指定了构建类型和允许编译子项目,构建类型不指定时默认也是 Debug,可省略;另外没有指定安装路径,所以会安装到默认路径/usr/local,如果需要指定,则使用-DCMAKE_INSTALL_PREFIX="../install_path/";其他参数请参考官网。
  • cmake 这一步,我使用了 ninja 作为构建工具,因为 llvm 官网推荐用 ninja,如果要使用 gnu make 或其他工具,请参考官网。

遇到问题

  1. 提示缺少 cmake

    解决:安装 cmake,sudo yum install cmake,之后重新执行时,提示我 cmake 的版本过低,需要至少3.4版本,于是从网上下载了 cmake 的源码,卸载低版本 cmake,修改环境变量指向高版本 cmake,参考:https://www.jianshu.com/p/b283fad5e4de

  2. 提示缺少 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 之前需要安装 re2cGLIBCXX_3.4.21 。安装 re2c 稍微麻烦一些,下载源码后,编译安装,参考:https://www.24kplus.com/linux/549.html

  3. 提示 gcc 版本过低,要求 5.1 以上版本

    解决: 安装高版本 gcc,源码编译安装。当时这个问题困扰了我很久,原因是编译 gcc 升级高版本这件事本身就陷阱重重,编译过程中遇到不少问题,后来也没有成功。最后的解决方案是安装了高版本的 CentOS,之前是 6.9,后来改成了 8,CentOS 8 上自带的 gcc 是 8.2.1 版本,问题自然解决。

  4. 提示缺少高版本的 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源码