Это отчасти связано с этим вопросом здесь: GtkD (the Gtk+bindings for the D language) why compile it?Использование GtkD в Linux, как мне статически связывать скомпилированную библиотеку?
Я использую GtkD с языком программирования D на Ubuntu 12.04 и я застрял, пытаясь статически скомпилированные с LIBS моей программы. После 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, но это связано правильно?
Это работает! RAWR !!!!! ура !!! Это заводило меня в течение нескольких дней! –
Один вопрос, однако, как строка «gtkd» ссылается на файл «libgtkd.a»? –
Компонент в вашей системе знает, как его перевести. В linux он добавляет «lib» и добавляет «.so». В Windows это делает правильную вещь, что бы это ни было. Поэтому лучше не создавать привязку к вашей системе. –