我正在开发一个LLVM编译器传递.我按以下方式运行传递:
编译为LLVM bitcode
clang foo.c -emit-llvm -c -o foo.bc
Run Code Online (Sandbox Code Playgroud)通过opt运行foo.bc(没有此步骤仍会发生错误)
编译回目标文件
clang -c -o foo.o foo.bc
Run Code Online (Sandbox Code Playgroud)现在foo.o可能是静态库的一部分.
ar rc libfoo.a foo.o
Run Code Online (Sandbox Code Playgroud)当以这种方式编译所有我的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) 如何使用Llvm/Clang(版本3.3(主干168461))提供的工具生成可运行的可执行文件?
我编译了一个对象,clang++ -c [...]我想尝试将此对象链接到一个特定的库,看看是否可以生成一个可用的可执行文件.
我注意到从3.1版本llvm-ld它已被删除,llvm-link看起来并没有继承所有选项llvm-ld,虽然它被标记为官方文档上的llvm-ld的替代品,所以我只是不知道我怎么样我应该链接这个对象.
我不想使用ldGNU/GCC套件,只使用llvm的工具.
总结一下,这是我从svn的llvm构建中获得的工具
bugpoint clang-check llvm-bcanalyzer llvm-extract llvm-objdump llvm-stress scan-build
c++-analyzer clang-tblgen llvm-config llvm-link llvm-prof llvm-symbolizer scan-view
ccc-analyzer llc llvm-cov llvm-lit llvm-ranlib llvm-tblgen scanview.css
clang lli llvm-diff llvm-mc llvm-readobj macho-dump ScanView.py
clang++ llvm-ar llvm-dis llvm-mcmarkup llvm-rtdyld opt sorttable.js
clang-3.3 llvm-as llvm-dwarfdump llvm-nm llvm-size Reporter.py startfile.py
Run Code Online (Sandbox Code Playgroud)
谢谢.