llvm-link与外部库

时间:2012-10-02 07:17:56

标签: llvm

我现在正在使用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!

我试图找到如何在链接时添加外部库,但我一无所获。有没有办法让它运行?

1 个答案:

答案 0 :(得分:4)

llvm-link不是“常用”链接器。它用于合并多个IR文件。因此,在您的情况下,a.o只是一个二进制LLVM IR,一切正常,因为llvm-link自动解析文本LLVM IR。

您无法“链接”本机库。但是,您可以将它们加载到lli进程中(例如通过LD_PRELOAD),并且应该解析符号。