【发布时间】:2015-01-23 15:33:19
【问题描述】:
我的编译器将这个未定义的引用报告给openWallet(..) 函数。如您所见,我已链接响应库-L/usr/lib -lkdeui -kdecore -lkparts。
错误:
password.cpp:(.text+0x29): undefined reference to `KWallet::Wallet::openWallet(QString const&, unsigned long long, KWallet::Wallet::OpenType)'
编译命令:
g++ -Wl,-O1 -Wl,-rpath-link,/usr/lib/x86_64-linux-gnu -o 密码客户端“所有 *.o 文件”-L/usr/lib -lkdecore -lkdeui -lkparts -lglib-2.0 -L/usr/X11R6/lib64 -L/usr/lib/x86_64-linux-gnu -lGL -lpthread
QtCreator 报告了同样的错误。 .pro 文件包含
LIBS += -lkdecore \
-lkdeui \
-lkparts
我已经安装了所有必需的库。证明:
nm -D /usr/lib/libkdeui.so | grep openWallet 的输出是:
000000000032df70 T _ZN7KWallet6Wallet10openWalletERK7QStringmNS0_8OpenTypeE
如您所见,libkdeui.so 文件中有该函数。 ^^
我已经安装了以下库:
sudo apt-get install kdelibs5-dev libkparts4
谁能告诉我我做错了什么?哪里错了?
SSCCE:
#include <QCoreApplication>
#include <KWallet/Wallet>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
using namespace KWallet;
Wallet* wallet = Wallet::openWallet(Wallet::LocalWallet(), 0);
return a.exec();
}
.pro文件:
QT += core
TARGET = untitled
TEMPLATE = app
SOURCES += main.cpp
LIBS += -lkdeui -lkdecore -lkparts
INCLUDEPATH += /usr/include/KDE \
/usr/include/KDE/KWallet
编译:
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I。 -I/usr/include/KDE -I/usr/include/KDE/KWallet -ITDIR/include/QtGui -ITDIR/include -I. -o main.o main.cpp
g++ -m64 -Wl,-O1 -o untitled main.o -L/usr/lib -L/usr/X11R6/lib64 -lkdeui -lkdecore -lkparts -L/usr/lib/x86_64-linux-gnu -lGL -lpthread
【问题讨论】:
-
你能提供一个 SSCCE 来重现这个问题吗?
-
@lpapp 我已经编辑了问题,我必须更新 kwallet.h 中的标题,因为它们是用于旧 Qt 的。
#include <QtCore/QStringList>->#include <QStringList>等 -
您是否可以安装 32 位版本的
KWallet库?即使您已将它们包含在LIBS指令中,链接也会失败。 -
当库的排序不正确时,有时会出现问题。尝试将
-lkdeui作为最后一个命令行参数。或者至少尝试LIBS += -lkdecore -lkparts -lkdeui -
@Noturab:非常感谢 SSCCE,我赞成你的问题。
标签: c++ linux compiler-errors g++ kde