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 程序用于检索有关系统中已安装库的信息。它通常用于编译和链接一个或多个库。

如果你只给 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 回答