我有两个静态库文件(.a)和一个使用opt pass创建的bitecode文件(.bc)。在这个咬文件中我添加了我的自己的代码,并在此代码中,我需要调用静态库中声明的函数。我已经注意到,LLVM-LD工具不再存在铛新的版本,所以我尝试了两种不同的方法这三个文件链接(两个图书馆和一个bitecode文件):当在llvm中链接* .a和* .o文件时出现错误
尝试用gcc链接:
与LLC创建file.bc的目标文件
$llc -filetype=obj file.bc -o file.o
链接对象和库与海湾合作委员会
$gcc -I lib1.a lib2.a -O3 file.o -o file
个这些命令给我这个错误:
file.o: In function `main':
file.bc:(.text+0xc0): undefined reference to `function_in_lib'
collect2: error: ld returned 1 exit status
(function_in_lib是,我需要从lib和编译器调用无法找到此功能的函数)
2.的第二种方法是使用ld命令
与LLC创建file.bc
的对象文件$llc -filetype=obj file.bc -o file.o
链接对象和库用LD
$ld -o linked lib1.a lib2.a file.o -lc
这些命令给我这个错误:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004002b0
new.o: In function `main':
new.bc:(.text+0xc0): undefined reference to `function_in_lib'
我试图改变参数的顺序,但我有更多的错误,当我做它。我认为,从故障的连接成为,任何想法?
'$ gcc的-I了lib1.a lib2.a -O3 file.o -o文件'应该改为'$ gcc -llib1.a -llib2.a -O3 file.o -o file'。 gcc的'-I'参数是指定额外的包含路径。 –
当我尝试你的图书馆的建议格式时,这给我: '/ usr/bin/ld:找不到-llibtpc.a /usr/bin/ld:找不到-llibregions。一个 collect2:错误:LD返回1退出status' – adespotos
哎呀,我没有在第一评论:)删除库的前缀和后缀('.a','.so'末和'lib'各图书馆的开始)。确保它们可用并放置在正确的目录(通常为'/ usr/lib /') –