我正在尝试使用LLVM 3.4工具链构建GNU Coreutils 8.23。一个非常重要的方面是我还需要所有coreutils的LLVM字节码。因此,我需要在CFLAGS中加入-emit-llvm
。因此,我从coreutils Makefile的LINK变量中删除了$(CFLAGS)。然后,我运行以下命令:
make CC=/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang
CCLD=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link
IGNORE_UNUSED_LIBRARIES_CFLAGS= CFLAGS="-emit-llvm -S"
VERBOSE=1 AM_CFLAGS= AM_LDFLAGS=
AR=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-ar
RANLIB=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-ranlib
我收到以下错误:
/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link: src/libver.a:1:2: error: expected integer
!<arch>
^
/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link: error loading file 'src/libver.a'
有关如何使其发挥作用的任何想法?
答案 0 :(得分:1)
试试这个。
export CC="/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang"
export CXX="/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang++"
确保这是编译器工具链所在的位置。
然后在coreutils
目录中运行./configure
(在此运行./bootstrap
之前,如果您还没有运行它)。运行./configure
检查clang
是否可以正确编译并创建具有正确配置的Makefile
。
然后按照指示执行make
和make install
。
答案 1 :(得分:0)
llvm-link无法读取lib文件'.a'。 一个可能的非正式黑客可能是找出生成这个lib的Makefile,然后让
AR = llvm-link, ar option = -o(i.e. change ar rv to llvm-link -o),
并在编译时禁用ranlib命令(如果使用llvm-link则不需要ranlib)。
然后生成的'.a'文件是一个拼接的bc文件,这个'.a'文件应该由你正在调用的llvm-link命令接受