0

これは、ここでこの質問にリンクされています:GtkD(D言語のGtk +バインディング)なぜそれをコンパイルするのですか?

Ubuntu 12.04でDプログラミング言語でGtkDを使用していますが、コンパイルされたライブラリをプログラムに静的にリンクしようとして立ち往生しています。GtkDがコンパイルされると、3つのライブラリがあります

  1. libgtkd.a
  2. libgtkdgl.a
  3. libgtkdsv.a

これらを実行した後、make installこれらは/usr/local/lib/フォルダーに配置され、GtkDソースは/usr/local/includes/d/フォルダー内に配置されます。また、ソースをファイルにコンパイルし、makeスクリプトがデフォルトでこれを行わないため、*.diそれらを関連するフォルダーに配置しました。/usr/local/includes/d/

これが私がコンパイルしたいソースです。

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エラーのように見えますが、それは正しくリンクされていますか?

4

2 に答える 2

3

リンカーであるldでは、引数の順序が重要になります。一般に、それらに依存するコード/ライブラリの後に依存関係を配置する必要があります。だから私はあなたのプラグマを次のように書き直します:

pragma(lib, "gtkd"); // let ld find it in your path
pragma(lib, "dl");   // gtkd depends on dl, so link it after

次のようにコンパイルしてみてください。

dmd hello_world.d
于 2012-06-07T20:26:27.350 に答える
0

引数でそれを渡します dmd は、それらがリンカーに渡される必要があることを知っています

rdmd libgtkd.a libgtkdgl.a libgtkdsv.a -L-ldl hello_world.d
于 2012-06-07T20:05:53.197 に答える