小编Eri*_*ein的帖子

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

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

  1. 编译为LLVM bitcode

    clang  foo.c -emit-llvm -c -o foo.bc
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过opt运行foo.bc(没有此步骤仍会发生错误)

  3. 编译回目标文件

    clang  -c -o foo.o foo.bc
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在foo.o可能是静态库的一部分.

    ar rc libfoo.a foo.o
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)

源文件:

foo.c的:

int foo(int a)
{
    return a;
}
Run Code Online (Sandbox Code Playgroud)

foo.h中

int foo(int a);
Run Code Online (Sandbox Code Playgroud)

linkme.c

#include "foo.h"

int main(int argc, char *argv[])
{
   foo(6);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c llvm clang

4
推荐指数
1
解决办法
5626
查看次数

标签 统计

c ×1

clang ×1

llvm ×1