0

有没有办法在 llvm (*.ll) 中编译使用 C 中的函数的文件?

我使用check C创建了一个测试,并将其编译为:

$clang  counter_i.c counter_test_check.c   -lcheck

这样,我使用的是 check 中的库,但我需要生成使用 check 中的库的 llvm 代码。当我尝试这个命令时:

$clang -S -emit-llvm counter_i.c counter_test_check.c   

并尝试执行代码:

$lli-mp-3.5 counter_test_check.ll 

我收到这个答案:

LLVM ERROR: Program used external function 'srunner_create' which could not be resolved!

我认为一个解决方案是做一些事情:

$clang -S -emit-llvm counter_i.c counter_test_check.c   -lcheck

但不支持。

我认为类似的答案可以在:LLVM JIT-compiled program cannot find external functions

4

2 回答 2

3

是的,LLVM 有一个 C 接口(尽管与 C++ API 相比可能存在一些限制):

http://llvm.org/docs/doxygen/html/group__LLVMC.html

于 2014-04-13T04:41:47.310 回答
1

我找到了一个解决方案:

clang -S -emit-llvm -c counter_test_check.c counter_i.c  
clang -o executable counter_test_check.ll counter_i.ll  -lcheck
./executable

它分两步进行编译,这样我可以使用其他 llvm 源文件。

于 2014-04-14T19:37:04.223 回答