不能链接dbus和c++

Can not link dbus with c++

本文关键字:c++ dbus 链接 不能      更新时间:2023-10-16

我有一个简单的程序,其中包括dbus和使用基本函数,例如:

 DBusError err;
 dbus_error_init(&err);

当我尝试编译程序

g++ -Wall --std=c++11 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include  -ldbus-1 main.cpp

我得到以下错误:

main.cpp:(.text+0x4b): undefined reference to `dbus_error_init'
main.cpp:(.text+0x5a): undefined reference to `dbus_bus_get_private'
main.cpp:(.text+0x79): undefined reference to `dbus_error_free'
main.cpp:(.text+0xf4): undefined reference to `dbus_connection_set_exit_on_disconnect'
main.cpp:(.text+0x114): undefined reference to `dbus_bus_request_name'
main.cpp:(.text+0x123): undefined reference to `dbus_error_is_set'
main.cpp:(.text+0x138): undefined reference to `dbus_error_free'
collect2: error: ld returned 1 exit status

我不明白。我试图编译类似的应用程序,但写在C和一切编译和链接。

-l选项放在最后:

g++ -Wall --std=c++11 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include main.cpp -ldbus-1

这里有一个相关的问题:gcc &这个顺序的重要性是什么?

此行为是预期的,根据文档:

man g++


…你可以混合选项和其他参数。在大多数情况下,你使用的顺序并不重要。使用时,顺序很重要同一种类的几种选择;例如,如果您指定-L more然后,按照指定的顺序搜索目录。同样,-l选项的位置也很重要。

…-llibrary

在命令中写这个选项是有区别的;的链接器按顺序搜索和处理库和目标文件它们是指定的。因此,foo。0 -lz条。O在文件foo之后搜索库z。但是在酒吧之前。如果酒吧。0指的是z中的函数,这些函数可能没有被加载。