从LLVM bitcode编译对象时无法链接到静态库。

我正在开发一个LLVM编译器传递。 我通过以下方式运行传递:

  1. 编译为LLVM bitcode

    clang foo.c -emit-llvm -c -o foo.bc 
  2. 通过opt运行foo.bc(没有此步骤仍会出现错误)

  3. 编译回目标文件

     clang -c -o foo.o foo.bc 
  4. 现在foo.o可能是静态库的一部分。

     ar rc libfoo.a foo.o 
  5. 当以这种方式编译所有我的c文件时,我无法链接到libfoo.a。

     clang libfoo.a linkme.o -o linkme linkme.o:linkme.bc:function main: error: undefined reference to 'foo' clang: error: linker command failed with exit code 1 (use -v to see invocation) 

源文件:

foo.c的:

 int foo(int a) { return a; } 

foo.h中

 int foo(int a); 

linkme.c

 #include "foo.h" int main(int argc, char *argv[]) { foo(6); return 0; } 

现在我觉得很傻。 它与.bc文件无关,只与参数的顺序有关。

作品:

 clang linkme.o libfoo.a -o linkme 

失败:

 clang libfoo.a linkme.o -o linkme