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

时间:2013-01-30 20:28:25

标签: c llvm clang

我正在开发一个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)
    
  6. 源文件:

    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;
    }
    

1 个答案:

答案 0 :(得分:5)

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

使用:

clang  linkme.o  libfoo.a -o linkme

失败:

clang  libfoo.a linkme.o -o linkme