尝试在ubuntu 17.04上构建llvm / clang 3.42, 我提到的in this SO post提到了configre + make失败了。 我用这个非常相似的剧本给了cmake一个镜头:
#!/bin/bash
###############
# DEFINITIONS #
###############
LLVM_SVN=https://llvm.org/svn/llvm-project
TAG=tags/RELEASE_342/final
###############
# DIRECTORIES #
###############
BASEDIR=/home/oren/GIT/myLLVMpass
###############
# DIRECTORIES #
###############
LLVM_DIR=${BASEDIR}/llvm-3.4.2
LLVM_BUILD_DIR=${LLVM_DIR}/build
LLVM_SRC_DIR=${LLVM_DIR}/llvm
CLANG_SRC_DIR=${LLVM_SRC_DIR}/tools/clang
COMPILER_RT_SRC_DIR=${LLVM_SRC_DIR}/projects/compiler-rt
LIBCXX_SRC_DIR=${LLVM_SRC_DIR}/projects/libcxx
#########################################################
# Prepare llvm, llvm/src and llvm/build directories ... #
#########################################################
mkdir ${LLVM_DIR}
mkdir ${LLVM_SRC_DIR}
mkdir ${LLVM_BUILD_DIR}
##################
# Get llvm 3.4.2 #
##################
svn co ${LLVM_SVN}/llvm/${TAG} ${LLVM_SRC_DIR}
svn co ${LLVM_SVN}/cfe/${TAG} ${CLANG_SRC_DIR}
svn co ${LLVM_SVN}/compiler-rt/${TAG} ${COMPILER_RT_SRC_DIR}
svn co ${LLVM_SVN}/libcxx/${TAG} ${LIBCXX_SRC_DIR}
#################################
# No changes will be needed ... #
#################################
rm -rf ${LLVM_DIR}/.svn
rm -rf ${CLANG_DIR}/.svn
rm -rf ${COMPILER_RT_DIR}/.svn
rm -rf ${LIBCXX_DIR}/.svn
#####################################################
# Get inside the llvm/build directory and cmake ... #
#####################################################
cd ${LLVM_BUILD_DIR} && cmake ${LLVM_SRC_DIR}
###############
# make it !!! #
###############
make -j
我在configure + make试用版中遇到了完全不同的错误:
[ 78%] Building CXX object lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/Thumb1FrameLowering.cpp.o
[ 78%] Building CXX object lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMTargetObjectFile.cpp.o
[ 78%] Building CXX object lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/MLxExpansionPass.cpp.o
[ 78%] Building CXX object lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/Thumb2InstrInfo.cpp.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report, with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.
tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/build.make:134: recipe for target 'tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.o' failed
make[2]: *** [tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.o] Error 4
CMakeFiles/Makefile2:15102: recipe for target 'tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/all' failed
make[1]: *** [tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/all] Error 2
这里发生了什么? 非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
您正面临编译器崩溃:
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report, with preprocessed source if appropriate.
这基本上是一个编译器错误 - 编译器应该永远不会崩溃,即使面对错误的输入。
有几种方法可以解决这个问题:
一个选项 - 如果您具有这种灵活性 - 正在更改编译器版本,无论是更新到更新版本,还是更改为完全不同的C ++编译器。
由于使用gcc(cc1plus
)发生崩溃,我建议更改为clang
,这是一个非常好的选择。 clang与gcc非常兼容,通常可以作为替代品使用。由于您正在构建LLVM,因此您很可能能够顺利构建clang(因为构建LLVM / clang对于clang的构建过程是不可或缺的)。
不同编译器因同一输入而崩溃的可能性非常少,因此有希望使用clang。或者,您可以尝试更新的gcc版本,例如7.2
。
如果您无法更改编译器,可以尝试通过更改崩溃文件的编译器标志来解决崩溃问题 - 例如,将优化级别从-O2
降低到{{ 1}}(通常试图放松帮助编译器成功的场景)。
为了精确定位崩溃文件,最好从-O0
中删除-j
标志,以便它只使用一个编译器进程连续运行,因此崩溃文件将是最后一个编译,并没有混淆哪个文件导致编译器崩溃。
从命令行更改编译器标志的快速简便方法是使用make
编译指示执行此操作,该编译指示允许您在源文件本身中指定优化标记,从而使您无需修补构建系统(这可能是一种痛苦)。
优化编译指示的GCC语法是:optimize
。
您可以简单地将编译指示放在源文件的顶部,在包含之后,它将影响该文件中的所有函数。
请注意,大多数现代编译器都支持#pragma GCC optimize ("string" ...)
编译指示,但旧编译器(例如GCC 4.8及更早版本)可能无法使用它。
总结一下 - 我的第一个建议是从默认包(optimize
)安装clang,并将其指定为apt-get install clang
(configure
和CC=clang
的编译器)。
或者,如果您可以更改LLVM的源代码并且更喜欢快速而肮脏的修复,CXX=clang++
可能会完成工作。