c - Dbus-API - 在 c/Linux 中获取服务链接错误?

标签 c linux gcc dbus

我正在尝试为 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/

相关文章:

将最大堆转换为二叉搜索树

linux - 可以找到将找到的文件的文件名推送到管道中吗?

c++ - 模板推导在 GCC 4.6 和 4.7 上的两个不同结果

将非指针变量转换为指向数组的指针

linux - 使用容器名称从主机操作系统解析 docker 容器 IP

c++ - 基于boost的单元测试套件编译缓慢

c - 写了一段代码,但是有一些错误

C程序制作链表的第二个副本

c - 我的 makefile 有什么问题?

linux - 针对 ARM9 与 ssl 交叉编译 cURL 时出现问题