0

私は今LLVMで遊んでいて、それはJITです。私は JIT にかなり興味があり、小さな GTK+ の hello world を書きました。

#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;
}

この方法でビットコードにコンパイルしました:

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!

リンク時に外部ライブラリを追加する方法を見つけようとしましたが、何も見つかりませんでした。それを実行させる方法はありますか?

4

1 に答える 1

5

llvm-linkは「通常の」リンカーではありません。複数のIRファイルをマージするために使用されます。したがって、あなたの場合、aoは単なるバイナリLLVM IRであり、llvm-linkがテキストのLLVM IRを自動的に解析したため、すべてが機能しました。

ネイティブライブラリを「リンク」することはできません。ただし、それらをlliプロセスにロードすることができ(たとえば、LD_PRELOADを介して)、シンボルは解決されるはずです。

于 2012-10-02T20:38:37.387 に答える