Qt包含来源的未定义参考

时间:2015-08-31 09:21:38

标签: c++ qt dbus

我在Qt环境中遇到了一些问题。我想只使用环境Qt来控制应用程序,我用C ++编写代码但是 **我必须使用Cross Compilator。 **当然我已经在我的Qt中正确安装了。

另外我必须使用 dbus-1.6.8 。这是重要条件,因为我将代码写入嵌入式系统,而库应该与设备中使用的相同。

http://dbus.freedesktop.org/releases/dbus/dbus-1.6.8.tar.gz

我将带有源的目录放到我的项目的目录中,并修改了* .pro文件添加路径

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
INCLUDEPATH += ./dbus-1.6.8  

在此之后,我将main.cpp包含在主头文件中,其中包含所有下一个必需的标题

#include <dbus/dbus.h>

接下来我尝试使用这个库

#include <dbus/dbus.h>
main(){

DBusError err;   // both values it is OK Qt finds this type
DBusConnection *dbus_conn;

// but below function doesn't find

    dbus_error_init(&err);
    dbus_conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);

}

我收到错误

 undefined reference to `dbus_error_init'
 undefined reference to `dbus_bus_get_private'
 collect2: error: ld returned 1 exit status

当然以上功能存在于源目录中我检查过。尽管如此,Qt没有找到这些声明。

有什么问题?

PS :另外我添加了树目录,当然这不是全部,但最重要的目录是可见的

.
├── bus
├── cmake
│   ├── bus
│   ├── dbus
│   ├── doc
│   ├── modules
│   ├── test
│   │   └── name-test
│   └── tools
├── dbus
├── doc
├── m4

...
....
....

只有 dbus direcytory

├── dbus
│   ├── dbus-address.c
│   ├── dbus-address.h
│   ├── dbus-arch-deps.h
│   ├── dbus-arch-deps.h.in
│   ├── dbus-auth.c
│   ├── dbus-auth.h
│   ├── dbus-auth-script.c
│   ├── dbus-auth-script.h
│   ├── dbus-auth-util.c
│   ├── dbus-bus.c
│   ├── dbus-bus.h
│   ├── dbus-connection.c
│   ├── dbus-connection.h
│   ├── dbus-connection-internal.h
│   ├── dbus-credentials.c
│   ├── dbus-credentials.h
│   ├── dbus-credentials-util.c
│   ├── dbus-dataslot.c
│   ├── dbus-dataslot.h
│   ├── dbus-errors.c
│   ├── dbus-errors.h
│   ├── dbus-file.c
│   ├── dbus-file.h
│   ├── dbus-file-unix.c
│   ├── dbus-file-win.c
│   ├── dbus.h                          // main header
│   ├── dbus-hash.c
│   ├── dbus-hash.h
│   ├── dbus-internals.c
│   ├── dbus-internals.h
│   ├── dbus-keyring.c
│   ├── dbus-keyring.h
│   ├── dbus-list.c
.....
.....
.....

1 个答案:

答案 0 :(得分:2)

如果你已经编译了dbus,你应该得到一个名为libdbus-1.so的库。

在Qt .pro文件中,添加库的路径并链接库。

示例:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
INCLUDEPATH += ./dbus-1.6.8  
LIBS += -L./dbus-1.6.8 -ldbus-1

您有关于dbus及相关库here的更多信息。您无需从源代码编译和安装dbus。你可以使用apt-get安装它。无论如何,这取决于你:)