gcc undefined对dbus_ *的引用

时间:2016-05-10 08:51:40

标签: c gcc

有很多类似的问题,但遗憾的是他们没有多大帮助。

我试图从this帖子构建程序,但出现错误:

$ gcc `pkg-config --libs --cflags dbus-1` hh.c -o hh
/tmp/ccMabXOg.o: In function `main':
hh.c:(.text+0x18): undefined reference to `dbus_error_init'
hh.c:(.text+0x29): undefined reference to `dbus_bus_get'
hh.c:(.text+0x39): undefined reference to `dbus_error_is_set'
hh.c:(.text+0x5f): undefined reference to `dbus_error_free'
hh.c:(.text+0x80): undefined reference to `dbus_bus_name_has_owner'
hh.c:(.text+0x8f): undefined reference to `dbus_error_is_set'
hh.c:(.text+0x9f): undefined reference to `dbus_error_free'
hh.c:(.text+0xfb): undefined reference to `dbus_bus_request_name'
hh.c:(.text+0x10a): undefined reference to `dbus_error_is_set'
hh.c:(.text+0x11a): undefined reference to `dbus_error_free'
collect2: error: ld returned 1 exit status

系统中存在include <dbus/dbus.h>和文件:

# find / -name "dbus.h" -type f
/usr/include/dbus-1.0/dbus/dbus.h

但是dbus_error_init例如存在于dbus-errors.h文件中:

# grep -r dbus_error_init /usr/include/dbus-1.0/dbus/
/usr/include/dbus-1.0/dbus/dbus-errors.h:void        dbus_error_init      (DBusError       *error);

我不是C开发人员,也不太熟悉gcc和链接器,所以任何提示/链接都会受到赞赏。

3 个答案:

答案 0 :(得分:4)

您的链接顺序是从前到后的。而不是:

gcc `pkg-config --libs --cflags dbus-1` hh.c -o hh

做的:

gcc hh.c -o hh `pkg-config --libs --cflags dbus-1`

或:

gcc hh.c `pkg-config --libs --cflags dbus-1` -o hh

在链接序列中,需要符号定义的文件必须位于提供定义的文件之前。 因此库来自目标文件。如果不清楚这是如何适用的 你的命令行阅读this question和 我的回答。

答案 1 :(得分:1)

缺少的符号在dbus-1库中定义。您必须告诉gcc链接到该库。 如果您将库安装在系统的默认位置,则-ldbus-1标志应足以告诉链接器使用该库来解析丢失的符号。

答案 2 :(得分:0)

我试过这个例子,它是为我而建的。

首先,您收到链接错误而不是编译错误,因此找到您的库时会遇到问题。

这是我的图书馆:

/usr/lib/x86_64-linux-gnu/libdbus-1.so

我正在运行类似Debian / Ubuntu的Devuan GNU / Linux 1.0(jessie)。

  1. 您是如何安装dbus库的?
  2. 我这样得到了我的:

    $ sudo apt-get install --reinstall libdbus-1-dev