使用clang编译库(来自LLVM字节代码)

时间:2017-02-07 15:28:25

标签: clang llvm llvm-clang

我在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字节码编译该库?

1 个答案:

答案 0 :(得分:0)

如Daniel H在评论中提到的那样,

编译命令应为:

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

然后可以使用foo.o创建一个库,我已经在clang9上对其进行了测试。

希望这会有所帮助。