Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Undefined reference, altough references in library exists
Forum Updated to NodeBB v4.3 + New Features

Undefined reference, altough references in library exists

Scheduled Pinned Locked Moved Solved General and Desktop
6 Posts 3 Posters 840 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kkettinger
    wrote on last edited by kkettinger
    #1

    Hello,

    i have some strange reoccouring linker error which i can't track down. The last time i had this error it somehow disappeared after deleting the *.pro.user file, but this time, it just keeps reappearing.

    My subdirs pro file:

    TEMPLATE = subdirs
    
    common.subdir = src/common
    common.target = sub-src-common
    
    atctrl.subdir = src/atctrl
    atctrl.target = sub-src-atctrl
    atctrl.depends = common
    
    app.subdir = src/app
    app.target = sub-src-app
    app.depends = common atctrl
    
    SUBDIRS = common atctrl app
    

    The pro file for the app project:

    QT += quick
    
    CONFIG += c++17 static
    
    DEFINES += QT_DEPRECATED_WARNINGS
    DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
    DEFINES += QT_MESSAGELOGCONTEXT
    
    QT += serialport
    
    INCLUDEPATH += $$PWD/src
    
    SOURCES += \
            src/main.cpp
    
    #HEADERS += 
    
    TARGET = app
    
    # common
    win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../common/release/ -lcommon
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../common/debug/ -lcommon
    else:unix:!macx: LIBS += -L$$OUT_PWD/../common/ -lcommon
    
    INCLUDEPATH += $$PWD/../common
    DEPENDPATH += $$PWD/../common
    
    win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/libcommon.a
    else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/libcommon.a
    else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/common.lib
    else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/common.lib
    else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../common/libcommon.a
    
    # atctrl
    win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../atctrl/release/ -latctrl
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../atctrl/debug/ -latctrl
    else:unix:!macx: LIBS += -L$$OUT_PWD/../atctrl/ -latctrl
    INCLUDEPATH += $$PWD/../atctrl
    DEPENDPATH += $$PWD/../atctrl
    win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/release/libatctrl.a
    else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/debug/libatctrl.a
    else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/release/atctrl.lib
    else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/debug/atctrl.lib
    else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../atctrl/libatctrl.a
    

    The pro file for the atctrl library:

    QT -= gui
    
    TEMPLATE = lib
    CONFIG += c++17 staticlib
    
    DEFINES += QT_DEPRECATED_WARNINGS
    DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
    DEFINES += QT_MESSAGELOGCONTEXT
    
    SOURCES += \
        atctrl/atctrl.cpp
    
    HEADERS += \
        atctrl/atctrl.h
        
    QT += serialport
    
    # common
    win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../common/release/ -lcommon
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../common/debug/ -lcommon
    else:unix:!macx: LIBS += -L$$OUT_PWD/../common/ -lcommon
    
    INCLUDEPATH += $$PWD/../common
    DEPENDPATH += $$PWD/../common
    
    win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/libcommon.a
    else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/libcommon.a
    else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/common.lib
    else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/common.lib
    else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../common/libcommon.a
    

    The pro file for the common library:

    QT -= gui
    
    TEMPLATE = lib
    CONFIG += c++17 staticlib
    
    DEFINES += QT_DEPRECATED_WARNINGS
    DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
    DEFINES += QT_MESSAGELOGCONTEXT
    
    SOURCES += \
        common/serial_base/serial_base.cpp
    
    HEADERS += \
        common/serial_base/serial_base.h 
    
    QT += serialport
    
    !isEmpty(target.path): INSTALLS += target
    

    In the atctrl library there is the class ATCtrl::cATCtrl which derives from SerialBase::cSerialBase from the common library.

    In the app project i'm using the ATCtrl::cATCtrl class. So the dependency goes like app (project) -> atrctrl (staticlib) -> common (staticlib).

    When i'm building the app project, i get this linker error:
    cfe610bd-d9b5-4cfd-b85b-369dc6f6fb8d-grafik.png

    The complete error log:

    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::~cATCtrl()':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.h:42: undefined reference to `SerialBase::cSerialBase::~cSerialBase()'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::cATCtrl(QObject*)':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:48: undefined reference to `SerialBase::cSerialBase::cSerialBase(QObject*)'
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:48: undefined reference to `SerialBase::cSerialBase::~cSerialBase()'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::init(QString)':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:64: undefined reference to `SerialBase::cSerialBase::open(QString)'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::disableLocalEcho()':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:132: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::AT()':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:148: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::enableGPS(bool)':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:164: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::resetGPS(int)':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:182: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::getGPSStatus(int)':
    <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:199: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
    <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o):<build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:217: more undefined references to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)' follow
    <build_debug>/src/atctrl/debug/libatctrl.a(moc_atctrl.o): In function `ATCtrl::cATCtrl::qt_metacast(char const*)':
    <build_debug>\src\atctrl/debug/moc_atctrl.cpp:221: undefined reference to `SerialBase::cSerialBase::qt_metacast(char const*)'
    <build_debug>/src/atctrl/debug/libatctrl.a(moc_atctrl.o): In function `ATCtrl::cATCtrl::qt_metacall(QMetaObject::Call, int, void**)':
    <build_debug>\src\atctrl/debug/moc_atctrl.cpp:226: undefined reference to `SerialBase::cSerialBase::qt_metacall(QMetaObject::Call, int, void**)'
    <build_debug>/src/atctrl/debug/libatctrl.a(moc_atctrl.o):moc_atctrl.cpp:(.rdata+0x620): undefined reference to `SerialBase::cSerialBase::staticMetaObject'
    

    The linker command which fails is the following (i replaced the build dir with <build_debug>):

    g++ -Wl,-subsystem,windows -mthreads -o debug/app.exe debug/main.o debug/backend.o debug/moc_backend.o  -L"<build_debug>/src/common/debug" -lcommon -L"<build_debug>/src/atctrl/debug" -latctrl D:/Qt/5.14.2/mingw73_64/lib/libQt5Quick.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Gui.a D:/Qt/5.14.2/mingw73_64/lib/libQt5QmlModels.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Qml.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Network.a D:/Qt/5.14.2/mingw73_64/lib/libQt5SerialPort.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Core.a  -lmingw32 D:/Qt/5.14.2/mingw73_64/lib/libqtmain.a -LC:/openssl/lib -LC:/Utils/my_sql/mysql-5.7.25-winx64/lib -LC:/Utils/postgresql/pgsql/lib -lshell32 
    

    The two static libraries are included (-lcommon -latctrl) in the linker command.

    Now when i'm looking into libcommon.a with nm (nm -A -C libcommon.a), i can find all the references which the linker says it is not finding it:

    <...>
    libcommon.a:serial_base.o:000000000000014c T SerialBase::cSerialBase::open(QString)
    libcommon.a:serial_base.o:0000000000000f16 T SerialBase::cSerialBase::close()
    <...>
    libcommon.a:serial_base.o:0000000000000088 T SerialBase::cSerialBase::cSerialBase(QObject*)
    libcommon.a:serial_base.o:0000000000000088 T SerialBase::cSerialBase::cSerialBase(QObject*)
    libcommon.a:serial_base.o:000000000000005e T SerialBase::cSerialBase::~cSerialBase()
    libcommon.a:serial_base.o:0000000000000000 T SerialBase::cSerialBase::~cSerialBase()
    libcommon.a:serial_base.o:0000000000000000 T SerialBase::cSerialBase::~cSerialBase()
    

    What am i missing?

    Qt Creator Version 4.12.0
    Qt 5.14.2 (mingw730_64)

    I appreciate any help here, thanks.

    Best regards,
    Kevin

    jsulmJ 1 Reply Last reply
    0
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by Christian Ehrlicher
      #5

      The link order is wrong, -lactrl must come first,s ee also e.g. here

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      3
      • K kkettinger

        Hello,

        i have some strange reoccouring linker error which i can't track down. The last time i had this error it somehow disappeared after deleting the *.pro.user file, but this time, it just keeps reappearing.

        My subdirs pro file:

        TEMPLATE = subdirs
        
        common.subdir = src/common
        common.target = sub-src-common
        
        atctrl.subdir = src/atctrl
        atctrl.target = sub-src-atctrl
        atctrl.depends = common
        
        app.subdir = src/app
        app.target = sub-src-app
        app.depends = common atctrl
        
        SUBDIRS = common atctrl app
        

        The pro file for the app project:

        QT += quick
        
        CONFIG += c++17 static
        
        DEFINES += QT_DEPRECATED_WARNINGS
        DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
        DEFINES += QT_MESSAGELOGCONTEXT
        
        QT += serialport
        
        INCLUDEPATH += $$PWD/src
        
        SOURCES += \
                src/main.cpp
        
        #HEADERS += 
        
        TARGET = app
        
        # common
        win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../common/release/ -lcommon
        else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../common/debug/ -lcommon
        else:unix:!macx: LIBS += -L$$OUT_PWD/../common/ -lcommon
        
        INCLUDEPATH += $$PWD/../common
        DEPENDPATH += $$PWD/../common
        
        win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/libcommon.a
        else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/libcommon.a
        else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/common.lib
        else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/common.lib
        else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../common/libcommon.a
        
        # atctrl
        win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../atctrl/release/ -latctrl
        else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../atctrl/debug/ -latctrl
        else:unix:!macx: LIBS += -L$$OUT_PWD/../atctrl/ -latctrl
        INCLUDEPATH += $$PWD/../atctrl
        DEPENDPATH += $$PWD/../atctrl
        win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/release/libatctrl.a
        else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/debug/libatctrl.a
        else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/release/atctrl.lib
        else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../atctrl/debug/atctrl.lib
        else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../atctrl/libatctrl.a
        

        The pro file for the atctrl library:

        QT -= gui
        
        TEMPLATE = lib
        CONFIG += c++17 staticlib
        
        DEFINES += QT_DEPRECATED_WARNINGS
        DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
        DEFINES += QT_MESSAGELOGCONTEXT
        
        SOURCES += \
            atctrl/atctrl.cpp
        
        HEADERS += \
            atctrl/atctrl.h
            
        QT += serialport
        
        # common
        win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../common/release/ -lcommon
        else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../common/debug/ -lcommon
        else:unix:!macx: LIBS += -L$$OUT_PWD/../common/ -lcommon
        
        INCLUDEPATH += $$PWD/../common
        DEPENDPATH += $$PWD/../common
        
        win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/libcommon.a
        else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/libcommon.a
        else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/release/common.lib
        else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../common/debug/common.lib
        else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../common/libcommon.a
        

        The pro file for the common library:

        QT -= gui
        
        TEMPLATE = lib
        CONFIG += c++17 staticlib
        
        DEFINES += QT_DEPRECATED_WARNINGS
        DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
        DEFINES += QT_MESSAGELOGCONTEXT
        
        SOURCES += \
            common/serial_base/serial_base.cpp
        
        HEADERS += \
            common/serial_base/serial_base.h 
        
        QT += serialport
        
        !isEmpty(target.path): INSTALLS += target
        

        In the atctrl library there is the class ATCtrl::cATCtrl which derives from SerialBase::cSerialBase from the common library.

        In the app project i'm using the ATCtrl::cATCtrl class. So the dependency goes like app (project) -> atrctrl (staticlib) -> common (staticlib).

        When i'm building the app project, i get this linker error:
        cfe610bd-d9b5-4cfd-b85b-369dc6f6fb8d-grafik.png

        The complete error log:

        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::~cATCtrl()':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.h:42: undefined reference to `SerialBase::cSerialBase::~cSerialBase()'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::cATCtrl(QObject*)':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:48: undefined reference to `SerialBase::cSerialBase::cSerialBase(QObject*)'
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:48: undefined reference to `SerialBase::cSerialBase::~cSerialBase()'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::init(QString)':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:64: undefined reference to `SerialBase::cSerialBase::open(QString)'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::disableLocalEcho()':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:132: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::AT()':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:148: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::enableGPS(bool)':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:164: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::resetGPS(int)':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:182: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o): In function `ATCtrl::cATCtrl::getGPSStatus(int)':
        <build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:199: undefined reference to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)'
        <build_debug>/src/atctrl/debug/libatctrl.a(atctrl.o):<build_debug>\src\atctrl/../../../keyboard/src/atctrl/atctrl/atctrl.cpp:217: more undefined references to `SerialBase::cSerialBase::handleRequest(QString const&, QString const&, QStringList&)' follow
        <build_debug>/src/atctrl/debug/libatctrl.a(moc_atctrl.o): In function `ATCtrl::cATCtrl::qt_metacast(char const*)':
        <build_debug>\src\atctrl/debug/moc_atctrl.cpp:221: undefined reference to `SerialBase::cSerialBase::qt_metacast(char const*)'
        <build_debug>/src/atctrl/debug/libatctrl.a(moc_atctrl.o): In function `ATCtrl::cATCtrl::qt_metacall(QMetaObject::Call, int, void**)':
        <build_debug>\src\atctrl/debug/moc_atctrl.cpp:226: undefined reference to `SerialBase::cSerialBase::qt_metacall(QMetaObject::Call, int, void**)'
        <build_debug>/src/atctrl/debug/libatctrl.a(moc_atctrl.o):moc_atctrl.cpp:(.rdata+0x620): undefined reference to `SerialBase::cSerialBase::staticMetaObject'
        

        The linker command which fails is the following (i replaced the build dir with <build_debug>):

        g++ -Wl,-subsystem,windows -mthreads -o debug/app.exe debug/main.o debug/backend.o debug/moc_backend.o  -L"<build_debug>/src/common/debug" -lcommon -L"<build_debug>/src/atctrl/debug" -latctrl D:/Qt/5.14.2/mingw73_64/lib/libQt5Quick.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Gui.a D:/Qt/5.14.2/mingw73_64/lib/libQt5QmlModels.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Qml.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Network.a D:/Qt/5.14.2/mingw73_64/lib/libQt5SerialPort.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Core.a  -lmingw32 D:/Qt/5.14.2/mingw73_64/lib/libqtmain.a -LC:/openssl/lib -LC:/Utils/my_sql/mysql-5.7.25-winx64/lib -LC:/Utils/postgresql/pgsql/lib -lshell32 
        

        The two static libraries are included (-lcommon -latctrl) in the linker command.

        Now when i'm looking into libcommon.a with nm (nm -A -C libcommon.a), i can find all the references which the linker says it is not finding it:

        <...>
        libcommon.a:serial_base.o:000000000000014c T SerialBase::cSerialBase::open(QString)
        libcommon.a:serial_base.o:0000000000000f16 T SerialBase::cSerialBase::close()
        <...>
        libcommon.a:serial_base.o:0000000000000088 T SerialBase::cSerialBase::cSerialBase(QObject*)
        libcommon.a:serial_base.o:0000000000000088 T SerialBase::cSerialBase::cSerialBase(QObject*)
        libcommon.a:serial_base.o:000000000000005e T SerialBase::cSerialBase::~cSerialBase()
        libcommon.a:serial_base.o:0000000000000000 T SerialBase::cSerialBase::~cSerialBase()
        libcommon.a:serial_base.o:0000000000000000 T SerialBase::cSerialBase::~cSerialBase()
        

        What am i missing?

        Qt Creator Version 4.12.0
        Qt 5.14.2 (mingw730_64)

        I appreciate any help here, thanks.

        Best regards,
        Kevin

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #2

        @kkettinger said in Undefined reference, altough references in library exists:

        g++ -Wl,-subsystem,windows -mthreads -o debug/app.exe debug/main.o debug/backend.o debug/moc_backend.o -L"<build_debug>/src/common/debug" -lcommon -L"<build_debug>/src/atctrl/debug" -latctrl D:/Qt/5.14.2/mingw73_64/lib/libQt5Quick.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Gui.a D:/Qt/5.14.2/mingw73_64/lib/libQt5QmlModels.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Qml.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Network.a D:/Qt/5.14.2/mingw73_64/lib/libQt5SerialPort.a D:/Qt/5.14.2/mingw73_64/lib/libQt5Core.a -lmingw32 D:/Qt/5.14.2/mingw73_64/lib/libqtmain.a -LC:/openssl/lib -LC:/Utils/my_sql/mysql-5.7.25-winx64/lib -LC:/Utils/postgresql/pgsql/lib -lshell32

        The paths look strange: -L"<build_debug>/src/common/debug" -lcommon -L"<build_debug>/src/atctrl/debug"
        What is <build_debug>?
        Also, if common is a static lib when your pro file is wrong as you are linking dynamically.

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • K Offline
          K Offline
          kkettinger
          wrote on last edited by kkettinger
          #3

          I have replaced the build-dir with <build_debug>, the original path is:

          D:/Dev/project01/src/build-subdirs-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/
          

          @jsulm said in Undefined reference, altough references in library exists:

          Also, if common is a static lib when your pro file is wrong as you are linking dynamically.

          Why? I added "CONFIG += static" in the project pro-file, isn't that correct?

          1 Reply Last reply
          0
          • K Offline
            K Offline
            kkettinger
            wrote on last edited by kkettinger
            #4

            This is getting strange.. when i'm using SerialBase::cSerialBase (from common lib) directly in the app project (instantiating in main.cpp), suddenly the linker finds everything.

            It seems like the linker doesn't find the dependency to SerialBase::cSerialBase (common lib) when only using ATCtrl::cATCtrl (atctrl lib).

            Just for clarification, here the headers for the libraries:

            common.pro:

            class cSerialBase: public QObject
            {
                Q_OBJECT
            }
            

            atctrl.pro:

            class cATCtrl: public SerialBase::cSerialBase
            {
                Q_OBJECT
            }
            

            Usage in app.pro (main.cpp) which doesn't work (linker doesn't find SerialBase::cSerialBase):

            #include <atctrl/atctrl.h>
            
            int main(int argc, char *argv[])
            {
                ATCtrl::cATCtrl atctrl;
                return 0;
            }
            

            Usage in app.pro (main.cpp) which strangly does work:

            #include <atctrl/atctrl.h>
            
            int main(int argc, char *argv[])
            {
                ATCtrl::cATCtrl atctrl;
                SerialBase::cSerialBase serialBase;
                return 0;
            }
            
            1 Reply Last reply
            0
            • Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by Christian Ehrlicher
              #5

              The link order is wrong, -lactrl must come first,s ee also e.g. here

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              1 Reply Last reply
              3
              • K Offline
                K Offline
                kkettinger
                wrote on last edited by
                #6

                I switched the order in the app.pro file for the common and atctrl lib and now it works. Thank you very much.

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved