尝试在 ubuntu 17.04 上构建 llvm/clang 3.42 时,
如前所述,我使用 configre+make 失败了 in this SO post .
我用这个非常相似的脚本给了 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
这里发生了什么?
非常感谢任何帮助,谢谢!
最佳答案
您正面临编译器崩溃:
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report, with preprocessed source if appropriate.
这基本上是一个编译器错误 - 编译器永远不会崩溃,即使面对错误的输入也是如此。
有几种方法可以解决这个问题:
由于崩溃发生在使用 gcc (
cc1plus
) 构建,我建议更改为 clang
,这是一个很好的选择。 clang 与 gcc 的兼容性非常好,通常可以用作替代品。由于您正在构建 LLVM,因此您很可能能够顺利地使用 clang 构建(因为构建 LLVM/clang 是 clang 构建过程中不可或缺的一部分)。不同的编译器因相同的输入而崩溃的机会非常罕见,因此希望使用 clang。或者,您可以尝试更新的 gcc 版本,例如
7.2
. -O2
降低优化级别至-O0
(通常试图放松帮助编译器成功的场景)。为了查明崩溃文件,最好删除
-j
来自 make
的标志, 这样它就只能使用一个编译器进程顺序运行,因此崩溃文件将是最后一个编译的文件,并且不会混淆哪个文件导致编译器崩溃。 optimize
pragma,它允许您在源文件本身中指定优化标志,从而使您免于修补构建系统(这可能会很痛苦)。优化编译指示的 GCC 语法是:
#pragma GCC optimize ("string" ...)
.您可以简单地将编译指示放在源文件顶部的包含之后,它会影响该文件中的所有函数。
注意
optimize
大多数现代编译器都支持 pragma,但旧编译器(例如 GCC 4.8 和更早版本)可能无法使用它。 总结一下——我的第一个建议是从默认包(
apt-get install clang
)安装 clang,并将其指定为 configure
的编译器。 ( CC=clang
和 CXX=clang++
)。或者,如果您可以更改 LLVM 的源代码并且更喜欢快速而肮脏的修复,
#pragma GCC optimize("-O0")
可能会完成工作。祝你好运!
关于ubuntu - 从源代码构建 llvm 3.42 时 gcc 崩溃(使用 cmake),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48149250/