Communication error: undefined link

My compiler reports this undefined function reference openWallet(..). As you can see, I linked the corresponding libraries -L/usr/lib -lkdeui -kdecore -lkparts.

Error:

password.cpp:(.text+0x29): undefined reference to `KWallet::Wallet::openWallet(QString const&, unsigned long long, KWallet::Wallet::OpenType)'

Compilation command:

g ++ -Wl, -O1 -Wl, -rpath-link, / usr / lib / x86_64-linux-gnu -o password_client "ALL * .o FILES" -L / usr / lib -lkdecore -lkdeui -lkparts -lglib-2.0 -L / usr / X11R6 / lib64 -L / usr / lib / x86_64-linux-gnu -lGL -lpthread

The same error is reported by QtCreator. .procontains

LIBS += -lkdecore \
        -lkdeui \
        -lkparts

I have all the necessary libs libraries. Evidence:

Conclusion nm -D /usr/lib/libkdeui.so | grep openWallet:

000000000032df70 T _ZN7KWallet6Wallet10openWalletERK7QStringmNS0_8OpenTypeE

As you can see, there is a funcion function in the libkdeui.so file. ^^

I have installed libraries with:

sudo apt-get install kdelibs5-dev libkparts4

Can someone tell me what I'm doing wrong? Where is the mistake?

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 file:

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 main.o -L/usr/lib -L/usr/X11R6/lib64 -lkdeui -lkdecore -lkparts -L/usr/lib/x86_64-linux-gnu -lGL -lpthread

+4
2

, Qt 5 KDE Framework 5. . :

KDE 4 related linkage: -lkdeui -lkdecore -lkparts
Qt 5 related linkage: -lQt5Widgets -lQt5Gui -lQt5Core

:

LIBS += -lkdecore -lkparts -lKF5Wallet
                           ^^^^^^^^^^^

, KF5, includeposaths :

INCLUDEPATH += \
    ...
    /usr/include/KF5 \
    /usr/include/KF5/KWallet/ \
    ...

, Qt 5 KF 5. , kde 4, kdeui - KDE 4. , :

dpkg -S /usr/lib/libkdeui.so

, WId unsigned long kdeui, , X11, Qt 5 quintptr in WId, , Qt 4 WId , Qt 5 WId quintptr, .

Qt 4 KDE 4, , , Qt 4 qmake , Qt 5. qtchooser, qmake-. qmake --version , , . Debian Archlinux qmake qmake-qt4.

, , widgets, gui, . widgets, , , , , Qt 5 KF 5 .

Qt 5 KF 5:

main.cpp

#include <QCoreApplication>
#include <KWallet>

using KWallet::Wallet;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    KWallet::Wallet* wallet = Wallet::openWallet(Wallet::LocalWallet(), 0);
    return a.exec();
}

main.pro

TARGET = kwallet-test
TEMPLATE = app
SOURCES += main.cpp
LIBS += -lKF5Wallet
INCLUDEPATH += /usr/include/KF5/KWallet

Build

qmake && make

Ubuntu, , Utopic (14.10):

sudo apt-get install libkf5wallet-dev

, Trusty Tahr (14.04) , , .

+1

++- , , : $ c++filt _ZN7KWallet6Wallet10openWalletERK7QStringmNS0_8OpenTypeE KWallet::Wallet::openWallet(QString const&, unsigned long, KWallet::Wallet::OpenType)

, (unsigned long) , KWallet::Wallt::openWallet, . .

EDIT: :

#include <cstdio>

class QString;

namespace KWallet {
class  __attribute__((__visibility__("default"))) Wallet {
public:
    enum OpenType {
       whatever
    };
    void openWallet(QString const&, unsigned long, OpenType);


    void openWallet(QString const&, unsigned long long, OpenType);
};
}

void KWallet::Wallet::openWallet(QString const&, unsigned long, OpenType) {
   printf("unsigned long\n");
}

void KWallet::Wallet::openWallet(QString const&, unsigned long long, OpenType) {
    printf("unsigned long long\n");
}

:

g++ ./madeup.cpp -shared -fPIC

, -: nm --dynamic --defined-only ./a.out 0000000000002020 A __bss_start 0000000000002020 A _edata 0000000000002021 A _end 00000000000007d4 T _fini 0000000000000638 T _init 0000000000000786 T _ZN7KWallet6Wallet10openWalletERK7QStringmNS0_8OpenTypeE 00000000000007ac T _ZN7KWallet6Wallet10openWalletERK7QStringyNS0_8OpenTypeE

++: m --dynamic --defined-only ./a.out | c++filt 0000000000002020 A __bss_start 0000000000002020 A _edata 0000000000002021 A _end 00000000000007d4 T _fini 0000000000000638 T _init 0000000000000786 T KWallet::Wallet::openWallet(QString const&, unsigned long, KWallet::Wallet::OpenType) 00000000000007ac T KWallet::Wallet::openWallet(QString const&, unsigned long long, KWallet::Wallet::OpenType)

, , .

+1

All Articles