我正在尝试为 C-DBUS 编译和运行示例。这是我的 DBUS 服务器。
#include <dbus/dbus.h>
/** How to compile dbus- gcc `pkg-config --cflags --libs dbus-1` dbus_server.c -o dbus_server.out **/
int main()
{
DBusError error;
DBusConnection *conn;
/** Initialize the bus.. **/
dbus_error_init(&error);
/** Get the system bus...........**/
conn = dbus_bus_get(DBUS_BUS_SYSTEM,&error);
if( !conn)
{
printf("ERROR................................in getting bus...\r\n");
return -1;
}
/** acquire service **/
dbus_bus_acquire_service(conn, "org.shreyas.tune",0,&error);
if( dbus_error_is_set(&error))
{
dbus_connection_disconnect(conn);
printf("Disconnect bus... some problem in acquiring service..\r\n");
return -1;
}
/** Let's send a signal **/
DBusMessage *msg;
DBusMessageIter iter;
/** My signal name is SJ_FIRST_EXAMPLE **/
msg = dbus_message_new_signal("org/shreyas/tune/attr","org.shreyas.tune.attr","SJ_FIRST_EXAMPLE");
/** Let fill the payload now **/
dbus_message_iter_init(msg,&iter);
dbus_message_iter_append_string(&iter,"This is my first example");
/** send the message **/
if(!dbus_connection_send( conn, msg,NULL) )
{
printf("Error in sending the message\r\n");
return -1;
}
dbus_message_unref(msg);
dbus_connection_flush(conn);
return 0;
}
$gcc `pkg-config --cflags --libs dbus-1` dbus_server.c -o dbus_server.out
dbus_server.c: In function ‘main’:
dbus_server.c:19:4: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
dbus_server.c:35:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
dbus_server.c:56:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
/tmp/ccGFwJyC.o: In function `main':
dbus_server.c:(.text+0x6a): undefined reference to `dbus_bus_acquire_service'
dbus_server.c:(.text+0x86): undefined reference to `dbus_connection_disconnect'
dbus_server.c:(.text+0xe4): undefined reference to `dbus_message_iter_append_string'
collect2: ld returned 1 exit status
如何解决这里的链接错误?请帮忙。
最佳答案
试试这个
gcc `pkg-config --cflags dbus-1` dbus-server.c `pkg-config --libs dbus-1` -o dbus-server.out
cflags 和 libs 分别进入编译器和链接器。出于某种原因,gcc 在两个单独的 pkg-config
调用中需要 .c 文件之前的 cflags 和之后的 libs。
也可以尝试使用 makefile 或脚本,这样您就不必在每次重新编译时都输入一团乱麻。
关于c - Dbus-API - 在 c/Linux 中获取服务链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20417716/