用clang编译一个库(从LLVM字节代码中提取)

问题描述 投票:0回答:1

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

clang llvm llvm-clang
1个回答
0
投票

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

编译命令应该是。

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

那么就可以用 foo.o,我已经在clang9上测试过了。

希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.