【问题标题】:Compile a library with clang (from LLVM byte code)用 clang 编译一个库(来自 LLVM 字节码)
【发布时间】:2017-02-07 15:28:24
【问题描述】:

我在 foo.c 中有一个库 foo:

int foo() { return 0; }

我想编译成静态对象foo.o。当我像下面这样直接做时,这行得通。

clang -c foo.c -o foo.o

但是,我想通过 llvm 字节码:

clang -emit-llvm -c foo.c  # Compile to LLVM byte code
clang foo.bc -o foo.o      # Compile LLVM byte code to native

最后一条命令失败并显示以下错误消息:

/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation)

我知道没有 main,因为我编译了一个库,所以这是意料之中的。如何从 LLVM 字节码编译该库?

【问题讨论】:

  • 我认为您在 LLVM 案例中将-c 添加到了错误的行中。如果你运行clang foo.bc -c -o foo.o 会发生什么?不是答案,因为我完全不确定我是对的;这只是一个猜测。
  • 这可能会有所帮助:stackoverflow.com/questions/21907504/…

标签: clang llvm llvm-clang


【解决方案1】:

正如 Daniel H 在评论中提到的,

编译命令应该是:

clang -emit-llvm -c -o foo.bc foo.c
clang -c foo.bc -o foo.o

那么用foo.o做一个库就可以了,我在clang9上测试过了。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2019-09-22
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多