【问题标题】:How to build coreutils with LLVM 3.4如何使用 LLVM 3.4 构建 coreutils
【发布时间】:2014-11-11 12:59:14
【问题描述】:

我正在尝试使用 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'

关于如何让它发挥作用的任何想法?

【问题讨论】:

  • 试过wllvm 编译它吗?

标签: llvm gnu-coreutils


【解决方案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

然后按照指示执行makemake install

【讨论】:

  • 我收到 max_align_t typedef 变量的重新定义错误。我在 coreutils/lib/stddef.h 中将其注释掉。我能够使用这种方法构建其余代码。
【解决方案2】:

这里的 Lib 文件 '.a' 不能被 llvm-link 读取。 一个可能的非正式破解可能是找出生成这个库的 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命令所接受

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2017-05-20
    相关资源
    最近更新 更多