LLVM+Clang编译安装卸载 |
您所在的位置:网站首页 › 安装llvm时找不到clang › 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 到此主要问题都解决了。 归纳起来主要几个原因: 内存不足导致链接失败磁盘空间不足导致链接失败硬件配置不够整个过程需要耗费大量时间。 卸载llvm安装llvm,目测磁盘至少50G,相当耗费磁盘空间。如果不用,可以卸载 cd build xargs rm < install_manifest.txt |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |