我现在正在使用LLVM,它是JIT。我对JIT非常感兴趣,然后我写了一个小的GTK + hello世界:
#include <gtk/gtk.h>
int main ()
{
gtk_init(NULL, NULL);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (win, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *lbl = gtk_label_new ("hello world");
gtk_container_add (GTK_CONTAINER (win), lbl);
gtk_widget_show_all (win);
gtk_main();
return 0;
}
我用这种方式将它编译成Bitcode:
clang -emit-llvm -S a.c `pkg-config --cflags gtk+-3.0`
llvm-link a.s -o a.o
但是当我运行它时
> lli a.o
LLVM ERROR: Program used external function 'gtk_init' which could not be resolved!
我试图找到如何在链接时添加外部库,但我一无所获。有没有办法让它运行?
答案 0 :(得分:4)
llvm-link不是“常用”链接器。它用于合并多个IR文件。因此,在您的情况下,a.o只是一个二进制LLVM IR,一切正常,因为llvm-link自动解析文本LLVM IR。
您无法“链接”本机库。但是,您可以将它们加载到lli进程中(例如通过LD_PRELOAD),并且应该解析符号。