0

http://cgit.collabora.com/git/user/alban/dbus-ping-pong.git/tree/からファイルをダウンロードしました

コマンドを使用してコンパイルしようとしています

gcc pkg-config --libs --cflags dbus-1 dbus-glib-1-2 glib-2.0 -o dbus-ping-pong dbus-ping-pong.c

しかし、私は以下のリンカーエラーを取得しています

/tmp/ccmJkxXb.o: In function g_once_init_enter': dbus-ping-pong.c:(.text+0x22): undefined reference tog_once_init_enter_impl'
/tmp/ccmJkxXb.o: In function dbus_glib_marshal_echo_srv__BOOLEAN__STRING_POINTER_POINTER': dbus-ping-pong.c:(.text+0x52): undefined reference tog_return_if_fail_warning'
dbus-ping-pong.c:(.text+0x79): undefined reference to g_return_if_fail_warning' dbus-ping-pong.c:(.text+0x9d): undefined reference tog_value_peek_pointer' dbus-ping-pong.c:(.text+0xac): undefined reference to g_value_peek_pointer' dbus-ping-pong.c:(.text+0x109): undefined reference tog_value_set_boolean' /tmp/ccmJkxXb.o: In function echo_ping_class_intern_init': dbus-ping-pong.c:(.text+0x122): undefined reference tog_type_class_peek_parent' /tmp/ccmJkxXb.o: In function echo_ping_get_type': dbus-ping-pong.c:(.text+0x162): undefined reference tog_intern_static_string' dbus-ping-pong.c:(.text+0x192): undefined reference to g_type_register_static_simple' dbus-ping-pong.c:(.text+0x1a8): undefined reference tog_once_init_leave' /tmp/ccmJkxXb.o: In function echo_ping_class_init': dbus-ping-pong.c:(.text+0x1cd): undefined reference tog_type_class_add_private' dbus-ping-pong.c:(.text+0x1e2): undefined reference to dbus_g_object_type_install_info' /tmp/ccmJkxXb.o: In functionecho_ping_init': dbus-ping-pong.c:(.text+0x1fe): undefined reference to g_type_instance_get_private' /tmp/ccmJkxXb.o: In functionecho_ping': dbus-ping-pong.c:(.text+0x21d): undefined reference to g_strdup' /tmp/ccmJkxXb.o: In functionclient': dbus-ping-pong.c:(.text+0x265): undefined reference to dbus_g_proxy_new_for_name' dbus-ping-pong.c:(.text+0x2c3): undefined reference todbus_g_proxy_call' dbus-ping-pong.c:(.text+0x2d1): undefined reference to dbus_g_error_quark' dbus-ping-pong.c:(.text+0x2f1): undefined reference todbus_g_error_get_name' dbus-ping-pong.c:(.text+0x305): undefined reference to g_printerr' dbus-ping-pong.c:(.text+0x31d): undefined reference tog_printerr' dbus-ping-pong.c:(.text+0x328): undefined reference to g_error_free' dbus-ping-pong.c:(.text+0x358): undefined reference tog_print' dbus-ping-pong.c:(.text+0x363): undefined reference to g_free' /tmp/ccmJkxXb.o: In functionmain': dbus-ping-pong.c:(.text+0x38f): undefined reference to g_type_init' dbus-ping-pong.c:(.text+0x3a3): undefined reference todbus_g_bus_get' dbus-ping-pong.c:(.text+0x3c7): undefined reference to g_object_new' dbus-ping-pong.c:(.text+0x3df): undefined reference tog_type_check_instance_cast' dbus-ping-pong.c:(.text+0x3f9): undefined reference to dbus_g_connection_register_g_object' dbus-ping-pong.c:(.text+0x406): undefined reference todbus_g_connection_get_connection' dbus-ping-pong.c:(.text+0x426): undefined reference to dbus_bus_request_name' dbus-ping-pong.c:(.text+0x43a): undefined reference tog_main_loop_new' dbus-ping-pong.c:(.text+0x44a): undefined reference to `g_main_loop_run'

誰でもこの問題を解決するのを手伝ってくれますか?

4

1 に答える 1

1

gcc -o dbus-ping-pong dbus-ping-pong.c pkg-config --libs --cflags dbus-1 dbus-glib-1 glib-2.0

次のコメントは、問題を最もよく説明しています (いくつかのフォーラムからコピー)

「ライブラリを正しい順序でリストすることは非常に重要です。gcc がコマンド ラインをスキャンすると、これまでに必要なものが取り込まれます。オブジェクトが見つかるたびに、プログラムに追加されます。ライブラリが見つかるたびに、そのオブジェクトが追加されます。その時点で必要なオブジェクトのみを取り込みます。常にオブジェクトの後にライブラリをリストする必要があります"

pkg-config プログラムは、システムにインストールされているライブラリに関する情報を取得するために使用されます。通常、1 つ以上のライブラリに対してコンパイルおよびリンクするために使用されます。

コマンドラインで一重引用符または二重引用符なしで pkg-config --libs --cflags dbus-1 dbus-glib-1 glib-2.0 のみを指定すると、 -pthread -I/usr/include/dbus-1.0 -I に展開されます/usr/lib/i386-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -pthread -ldbus-glib -1 -ldbus-1 -lpthread -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0 したがって、オブジェクトファイルの後に記載されているすべてのインクルードと依存ライブラリが含まれています

于 2012-06-14T11:25:05.303 に答える