7

Ubuntuで次のヘッダーを使用してCプログラムをコンパイルしようとしています:http://pastebin.com/SppCXb0U。最初はまったく運がなかったのですが、pkg-configについて読んだ後、次の行を作成しました。

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
4

1 に答える 1

13

問題はヘッダーファイルではなく、ライブラリにあります。「未定義の参照」に関する苦情は、通常、リンカーから発生します。ソースファイルのにライブラリ構成オプションを配置する必要があります。

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スイッチはソースファイルに従う必要があります。

于 2011-04-22T01:05:58.273 に答える