LLVM+Clang编译安装卸载

下载的是最新版本的代码,LLVM+Clang编译安装比较耗硬件资源,8核16G内存300G硬盘,硬盘是分两块,一块100G,另一块是200G。即使顺利跑完,保守估计也要3个小时,编译目录生成的文件有86G。

遇到几次内存和磁盘不够的问题,一一解决,下面是我的编译安装步骤和遇到的一些过程。

前期准备工作

1. 安装svn

yum install subversion

2. 升级cmake,升级到3.0以上版本。

[root@VM-100-213-centos ~]# cmake --version
cmake version 3.9.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

3. 升级gcc,升级到4.8以上版本。升级gcc会遇到比较多的问题,具体网上找找,也有很多解决办法,我升级到9.0以上版本。

[root@VM-100-213-centos ~]# gcc --version
gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

编译安装过程

1. 创建目录,下载代码

下载llvm核心源码

mkdir llvm-clang

cd llvm-clang

svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

下载Clang源码 

cd llvm/tools

svn co http://llvm.org/svn/llvm-project/cfe/trunk clang 

下载Clang工具源码

cd ../../llvm/tools/clang/tools

svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra

下载cimpiler-rt

 cd ../../llvm/projects

svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

创建编译目录,跟llvm目录平级,执行cmake、make、make install

[root@VM-100-213-centos ~/llvm-clang]# ll
total 8
drwxr-xr-x 18 root root 4096 Nov 12 15:46 build
drwxr-xr-x 17 root root 4096 Nov 11 12:21 llvm

[root@VM-100-213-centos ~/llvm-clang]# cd build/
[root@VM-100-213-centos ~/llvm-clang/build]# cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" ../llvm

问题记录

1. 内存不足引发的编译链接失败

现象一

[ 88%] Linking CXX shared library ../../../../lib/libclang.so
collect2: fatal error: ld terminated with signal 9 [Killed]
compilation terminated.
make[2]: *** [tools/clang/tools/libclang/CMakeFiles/libclang.dir/build.make:812: lib/libclang.so.10] Error 1
make[2]: *** Deleting file 'lib/libclang.so.10'
make[1]: *** [CMakeFiles/Makefile2:56172: tools/clang/tools/libclang/CMakeFiles/libclang.dir/all] Error 2
make: *** [Makefile:152: all] Error 2

现象二 

 [ 91%] Linking CXX executable ../../../../../../bin/clangd-fuzzer
collect2: error: ld returned 1 exit status
make[2]: *** [tools/clang/tools/extra/clangd/fuzzer/CMakeFiles/clangd-fuzzer.dir/build.make:215: bin/clangd-fuzzer] Error 1
make[1]: *** [CMakeFiles/Makefile2:55124: tools/clang/tools/extra/clangd/fuzzer/CMakeFiles/clangd-fuzzer.dir/all] Error 2
make: *** [Makefile:152: all] Error 2

失败了还看不到有效的错误日志,网上有人指出是内存不够,打开或调大虚拟内存。

top命令查看内存,发现每次失败的时候,内存使用率接近100%;执行free命令查看,虚拟内存关闭。

[root@VM-100-213-centos ~/llvm-clang/build]# free
              total        used        free      shared  buff/cache   available
Mem:       16165976      380968       91392       42064    15693616    15647720
Swap:             0           0           0

打开虚拟内存,设置4G的虚拟内存空间。

[root@VM-100-213-centos ~/llvm-clang/build]# cd /data/
[root@VM-100-213-centos /data]#

[root@VM-100-213-centos /data]#mkdir swap

[root@VM-100-213-centos /data]#dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096

[root@VM-100-213-centos /data]#du -sh /data/swap/swapfile 
4.1G    /data/swap/swapfile

[root@VM-100-213-centos /data]# mkswap /data/swap/swapfile 
mkswap: /data/swap/swapfile: warning: wiping old swap signature.
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=71faadb8-f7a4-466b-aecc-f1d2a8e0d291

[root@VM-100-213-centos /data]# swapon /data/swap/swapfile
[root@VM-100-213-centos /data]# free
              total        used        free      shared  buff/cache   available
Mem:       16165976      384692       92868       42064    15688416    15643764
Swap:       4194300           0     4194300 

2. 磁盘空间不足导致的编译链接失败

按上面步骤设置了虚拟内存后,还是编译失败,查看磁盘空间,光是编译目录,就有86G,相当大

# du -h --max-depth=1 ./llvm-clang/
1.4G    ./llvm-clang/llvm
86G     ./llvm-clang/build
87G     ./llvm-clang/

根目录是挂载到100G的硬盘上,df命令查看,磁盘使用率已经到100%。

解决办法,将整个目录move到另外一块200G的磁盘上,创建一个软链接,这样一是可以解决磁盘空间不足的问题,二是解决继续编译因路径修改导致的编译错误。

#move /root/llvm-clang /data/

#ln -s /data/llvm-clang /root

# ll /root/
total 126168
lrwxrwxrwx 1 root root        17 Nov 12 15:38 llvm-clang -> /data/llvm-clang/

 继续编译安装

#cd /root/llvm-clang/build

#make

#make install

到此主要问题都解决了。

归纳起来主要几个原因:

  1. 内存不足导致链接失败
  2. 磁盘空间不足导致链接失败
  3. 硬件配置不够整个过程需要耗费大量时间。

卸载llvm

安装llvm,目测磁盘至少50G,相当耗费磁盘空间。如果不用,可以卸载

cd build

xargs rm < install_manifest.txt 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值