cmake 从源代码(版本/16.x)构建llvm-project时,clang-16的链接失败

4jb9z9bj  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(197)

重要的事情先做;我正在使用的各种工具的版本:

OS: Ubuntu 20.04.1 LTS
ld: 2.34
gold: GNU gold (GNU Binutils for Ubuntu 2.34) 1.16
gcc/g++: 9.4.0
cmake: 3.26.0
ninja: 1.10.0

有关硬件配置的一些详细信息:

memory: 16 GiB
CPU: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz

我已经从llvm-projectrepository克隆了release/16.x分支。在创建了build目录并移动到该目录下之后,我使用了以下命令:

user@system:~/llvm-project/build$ cmake -G "Ninja" -DLLVM_ENABLE_PROJECTS="lld;clang" -DLLVM_TARGETS_TO_BUILD="RISCV" -DCMAKE_BUILD_TYPE="Debug" -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_PARALLEL_COMPILE_JOBS=1 -DLLVM_PARALLEL_LINK_JOBS=1 ../llvm

user@system:~/llvm-project/build$ ninja -j 1
  • llvm* 本身的构建成功进行,但是,当bin/clang-16的链接过程开始时,系统挂起(显然使用了太多内存),过了一段时间,我得到了以下消息(snippet re-generated after core llvm build completed):
[0/613] Linking CXX executable bin/clang-16
FAILED: bin/clang-16
: && /usr/bin/c++ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra
-Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long
-Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move
-Wno-noexcept-type ...
...
...
... lib/libLLVMDemangle.a -lrt -ldl -lpthread -lm && :
collect2: fatal error: ld terminated with signal 9 [killed]
compilation terminated.
ninja: build stopped: subcommand failed.

(* 我跳过了中间的一些行!*)
任何帮助都是受欢迎的。

附言:由于我将使用llvm和clang的源代码,所以我不希望构建release。我认为真实的的问题是静态链接,我的计算机无法处理。我查看了Not able to build LLVM from its source code的答案,但无法确定在何处以及如何设置标志。此外,Fatal Error building the llvm source code in Ubuntu的答案也建议使用cmake标志。正确的标志组合应该是什么?

fkaflof6

fkaflof61#

考虑到链接的帖子和评论,我首先安装了clang-12(* Ubuntu 20.04可用的版本 ),然后使用了以下配置:( 确保buildinstalled目录存在于项目根目录下 *)

user@system:~/llvm-project/build$ CC='/lib/llvm-12/bin/clang' \
CXX='/lib/llvm-12/bin/clang++' \
cmake -G "Ninja" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_PARALLEL_COMPILE_JOBS=1 \
-DCMAKE_INSTALL_PREFIX=$(pwd)/../installed \
-DLLVM_PARALLEL_LINK_JOBS=1 \
-DLLVM_LINK_LLVM_DYLIB=true \
-DLLVM_USE_SPLIT_DWARF=ON \
-DLLVM_USE_LINKER=gold \
-DCMAKE_EXE_LINKER_FLAGS='-Wl,-no-keep-memory -fuse-ld=gold' \
../llvm

配置完成后,通过以下方式执行构建:

ninja -j1

生成已成功完成(耗时约2小时10分钟)。后续的安装操作通过以下方式完成:

ninja install

主要目标是用动态链接代替构建库的静态链接,以防止内存不足的问题,这会导致工具比它们应该的要慢(* 也就是说,从这个构建中产生的llvm工具会工作得更慢 *),但是,考虑到硬件限制,这是最好的方法。

相关问题