包含源中的 Qt 未定义引用
Qt Undefined Reference at Include Sources
我在 Qt 环境中遇到了一些问题。我只想使用环境 Qt 来控制台应用程序,我正在用 C++ 编写代码,但是
**我必须使用交叉编译器。
**当然我已经在我的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 右主 头文件 添加到我的 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 目录
├── 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
.....
.....
.....
如果你已经编译了 dbus,你应该得到一个名为 libdbus-1.so
.
的库
在您的 Qt .pro 文件中,添加库的路径和 link 库。
示例:
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 安装它。无论如何,这取决于你:)
我在 Qt 环境中遇到了一些问题。我只想使用环境 Qt 来控制台应用程序,我正在用 C++ 编写代码,但是 **我必须使用交叉编译器。 **当然我已经在我的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 右主 头文件 添加到我的 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 目录
├── 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
.....
.....
.....
如果你已经编译了 dbus,你应该得到一个名为 libdbus-1.so
.
在您的 Qt .pro 文件中,添加库的路径和 link 库。
示例:
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 安装它。无论如何,这取决于你:)