我已经从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'有谁能帮我解决这个问题吗?
发布于 2012-06-14 19:25:05
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 --cflag dbus-1dbus-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,因此它包含了在目标文件之后提到的所有包含和依赖库
https://stackoverflow.com/questions/10171641
复制相似问题