使用虚拟机CentOS 64, 根据 http://clang.llvm.org/get_started.html一步一步地编译LLVM+Clang,
编译LLVM总是出现错误:
collect2: error: ld terminated with signal 9 [Killed]
首先检查了虚拟机的硬盘,通过df命令发现硬盘已经100%,于是扩展硬盘40G。只再VMWare界面扩展没有用,可以参考https://www.linuxidc.com/Linux/2011-02/32083.htm,将扩展的硬盘mount到系统上。
仍然出现同样的编译错误,网上搜索了一下,错误可能是由于交换区空间不足导致,扩展交换区大小即可。具体可以参考:https://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/
不过,我根据这些信息修改了,还是不能够编译通过。
后来,买了一块4G内存条,启动VMWare虚拟机时,给虚拟机分配4G内存,编译的时间缩短了很多,不过,依然再93%时连接Clang出现连接错误。
“ [ 93%] Linking CXX shared library ../../../../lib/libclang.so
../../../../lib/libclangStaticAnalyzerCheckers.a: error adding symbols: Memory exhausted
collect2: error: ld returned 1 exit status
看了有的帖子,说切换到命令行模式下,可以成功。尝试了,依然失败。
就在束手无策时,发现LLVM的指导网页(http://clang.llvm.org/get_started.html)上指定的编译选项是Debug模式,Debug模式比Release模式要大很多,消耗的资源也很大,于是就尝试把cmake的编译选项改成release,修改的命令为:
cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm
然后再在build目录下运行 make 命令,编译成功。
哎,在Linux系统下编译LLVM+Clang,真累。。。。。。
不过,LLVM确实是个好东东。
后续: 在OpenSuse Linux上,使用deubg模式依然失败,即使有足够的硬盘和内存。 使用release模式,编译成功。
【经过查证编译debug模式,编译之后的大小是release版本的5倍左右,没有足够大的硬盘做支撑,还是使用Release版本比较稳妥。】
幸运的是,Mac OS系统自带了LLVM了,不需要再费这么多力气安装,可以直接使用。