【发布时间】:2013-01-30 20:28:25
【问题描述】:
我正在开发 LLVM 编译器通道。我通过以下方式运行通行证:
-
编译为 LLVM 位码
clang foo.c -emit-llvm -c -o foo.bc 通过opt运行foo.bc(没有这一步还是会报错)
-
编译回目标文件
clang -c -o foo.o foo.bc -
现在 foo.o 可能是静态库的一部分。
ar rc libfoo.a foo.o -
当我的所有 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;
}
【问题讨论】:
-
尝试使用 ranlib 为 libfoo.a 创建索引。