2011-04-22 14 views
6

Ubuntuに次のヘッダを持つCプログラムをコンパイルしようとしています:http://pastebin.com/SppCXb0U。最初に私はまったく運を持っていなかったが、PKG-config設定について読んだ後、私はこの行を細工:dbusヘッダファイルを使ってCプログラムをコンパイルする

gcc `pkg-config --cflags --libs dbus-1` `pkg-config --cflags --libs glib-2.0` signals-tutorial.c 

しかし、それはまだ動作し、私は、このエラーを与えていない:

/tmp/cc3BkbdA.o: In function `filter_example': 
signals-tutorial.c:(.text+0x1a3): undefined reference to `dbus_connection_setup_with_g_main' 
/tmp/cc3BkbdA.o: In function `proxy_example': 
signals-tutorial.c:(.text+0x29a): undefined reference to `g_type_init' 
signals-tutorial.c:(.text+0x2b3): undefined reference to `dbus_g_bus_get' 
signals-tutorial.c:(.text+0x323): undefined reference to `dbus_g_proxy_new_for_name' 
signals-tutorial.c:(.text+0x369): undefined reference to `dbus_g_proxy_add_signal' 
signals-tutorial.c:(.text+0x38a): undefined reference to `dbus_g_proxy_connect_signal' 
collect2: ld returned 1 exit status 

ここから何をすべきか分かりません。

==================================

素敵な説明は - あなたに感謝します。しかし、私はそれを働かせることはできません。上記のコマンドを実行すると、次の結果が得られます。

gcc `pkg-config --cflags dbus-1` \ 
>  `pkg-config --cflags glib-2.0` \ 
>  signals-tutorial.c \ 
>  `pkg-config --libs dbus-1` \ 
>  `pkg-config --libs glib-2.0` 
/tmp/ccjN0QMh.o: In function `filter_example': 
signals-tutorial.c:(.text+0x1a3): undefined reference to `dbus_connection_setup_with_g_main' 
/tmp/ccjN0QMh.o: In function `proxy_example': 
signals-tutorial.c:(.text+0x29a): undefined reference to `g_type_init' 
signals-tutorial.c:(.text+0x2b3): undefined reference to `dbus_g_bus_get' 
signals-tutorial.c:(.text+0x323): undefined reference to `dbus_g_proxy_new_for_name' 
signals-tutorial.c:(.text+0x369): undefined reference to `dbus_g_proxy_add_signal' 
signals-tutorial.c:(.text+0x38a): undefined reference to `dbus_g_proxy_connect_signal' 
collect2: ld returned 1 exit status 

答えて

12

問題はライブラリファイルではありません。 「未定義の参照」に関する苦情は一般的にリンカーから来ます。あなたは後のソースファイル、ライブラリの設定オプションを配置する必要があります。

gcc `pkg-config --cflags dbus-glib-1` \ 
    `pkg-config --cflags dbus-1` \ 
    `pkg-config --cflags glib-2.0` \ 
    signals-tutorial.c \ 
    `pkg-config --libs dbus-glib-1` \ 
    `pkg-config --libs dbus-1` \ 
    `pkg-config --libs glib-2.0` 

--libsオプションは、コンパイラの-l一連のフラグが生成されます、コンパイラ、リンカーにそれらを渡します。リンカは、オブジェクトファイル(または、この場合はCソースファイル)から始めてシンボルを左から右に解決するので、すべてのライブラリ-lスイッチがソースファイルに従う必要があります。

+0

素敵な答えをありがとうございました。コメント欄は結果を投稿するのに十分ではないので、メインの投稿に貼り付けました。 –

+0

'pkg-config --libs dbus-1'と' pkg-config --libs glib-2.0'の出力は何ですか? –

+0

'-L/usr/lib/x86_64-linux-gnu -ldbus-1 -lpthread -lrt'と' -L/usr/lib/x86_64-linux-gnu -lglib-2.0'を基準にして –

関連する問題