這是一種鏈接到這個問題在這裏:GtkD (the Gtk+bindings for the D language) why compile it?在Linux上使用GtkD,我如何靜態鏈接編譯的庫?
我使用GtkD在Ubuntu 12.04的d的編程語言,我被卡住試圖靜態與我聯繫的程序編譯庫。一旦GtkD編譯有三個庫
- libgtkd.a
- libgtkdgl.a
- libgtkdsv.a
做make install
這些之後放入/usr/local/lib/
文件夾和GtkD源放置在/usr/local/includes/d/
文件夾內。我還將源代碼編譯爲*.di
文件,並將它們放在/usr/local/includes/d/
的相關文件夾中,因爲make腳本默認不會這樣做。
這是我想要編譯的源代碼。
pragma(lib, "/usr/local/lib/libgtkd.a");
import gtk.MainWindow;
import gtk.Label;
import gtk.Main;
void main(string[] args)
{
Main.init(args);
MainWindow win = new MainWindow("Hello World!");
win.setDefaultSize(200, 100);
win.add(new Label("Hello World"));
win.showAll();
Main.run();
}
這裏的編譯器命令我使用:
rdmd -L-ldl hello_world.d
這裏的錯誤:
/usr/local/lib/libgtkd.a(Loader.o): In function `_D4gtkc6Loader12pLoadLibraryFAyaE4gtkc6Loader4RTLDZPv':
src/gtkc/Loader.d:(.text._D4gtkc6Loader12pLoadLibraryFAyaE4gtkc6Loader4RTLDZPv+0x28): undefined reference to `dlopen'
src/gtkc/Loader.d:(.text._D4gtkc6Loader12pLoadLibraryFAyaE4gtkc6Loader4RTLDZPv+0x31): undefined reference to `dlerror'
/usr/local/lib/libgtkd.a(Loader.o): In function `_D4gtkc6Loader10pGetSymbolFPvAyaZPv':
src/gtkc/Loader.d:(.text._D4gtkc6Loader10pGetSymbolFPvAyaZPv+0x23): undefined reference to `dlsym'
src/gtkc/Loader.d:(.text._D4gtkc6Loader10pGetSymbolFPvAyaZPv+0x2c): undefined reference to `dlerror'
/usr/local/lib/libgtkd.a(Loader.o): In function `_D4gtkc6Loader14pUnloadLibraryFPvZi':
src/gtkc/Loader.d:(.text._D4gtkc6Loader14pUnloadLibraryFPvZi+0x9): undefined reference to `dlclose'
collect2: ld returned 1 exit status
--- errorlevel 1
shell returned 1
任何想法我做錯了嗎?它看起來像一個LD錯誤,但這是正確的?
This Works! RAWR !!!!!乾杯!!!這已經讓我纏繞了好幾天! –
雖然有一個問題,字符串'gtkd'如何引用文件'libgtkd.a'? –
系統上的鏈接器知道是否需要翻譯它。在Linux上,它預先放置一個「lib」並附加一個「.so」。在Windows上,它會做適當的事情,無論如何。所以最好不要讓你的鏈接系統特定。 –