[SOLVED] QMake Problem: Linken von statischen Libraries

Verschiedenes zu Qt
Antworten
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

[SOLVED] QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Hallo,

ich habe eine statische Lib zlib, eine statische Lib quazip, die auf Klassen in zlib verweist, und eine Lib core, die Funktionen aus quazip verwendet.
Das executable linked nun gegen core, zlib und quazip.
Aber ich bekomme immer wieder "undefined reference" Fehlermeldungen.

Was mache ich falsch?

Ich verstehe nicht, was schief läuft. Ich dachte immer static libs sind nur Archive für Objectfiles, daher sollte das Linken doch recht simpel sein.
Warum findet er die Symbole nicht?

Ich werde mal die COR Files an den Thread hängen, eventuell mache ich ja was falsch?
Zuletzt geändert von TheGrudge2 am 24. Januar 2013 23:04, insgesamt 1-mal geändert.
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Das Haupt COR file:

Code: Alles auswählen

#-------------------------------------------------
#
# Project created by QtCreator 2012-04-28T10:09:34
#
#-------------------------------------------------

TEMPLATE = subdirs
CONFIG += ordered

RESOURCES += \
    myresources.qrc

SUBDIRS += \
    libs/3rdparty/zlib \
    libs/3rdparty/quazip \
    core \
    app

libs/3rdparty/quazip.depends = libs/3rdparty/zlib
core.depends = libs/3rdparty/quazip
app.depends = core
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Code: Alles auswählen

#-------------------------------------------------
#
# Project created by QtCreator 2012-11-20T21:24:02
#
#-------------------------------------------------

QT       += core gui xml webkit sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TEMPLATE = lib
CONFIG += staticlib

RESOURCES += \
    ../myresources.qrc

[...] header files und sources[...]


INCLUDEPATH += $$PWD/../libs/3rdparty/quazip/quazip
DEPENDPATH += $$PWD/../libs/3rdparty/quazip/quazip

INCLUDEPATH += $$PWD/../libs/3rdparty/zlib/zlib
DEPENDPATH += $$PWD/../libs/3rdparty/zlib/zlib
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Code: Alles auswählen

#-------------------------------------------------
#
# Project created by QtCreator 2012-11-21T07:46:41
#
#-------------------------------------------------

QT       += core gui xml webkit sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TEMPLATE = app

RESOURCES += \
    ../myresources.qrc


# lib core
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../core/release/ -lcore
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../core/debug/ -lcore
else:unix:!symbian: LIBS += -L$$OUT_PWD/../core/ -lcore

INCLUDEPATH += $$PWD/../core
DEPENDPATH += $$PWD/../core

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../core/release/core.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../core/debug/core.lib
else:unix:!symbian: PRE_TARGETDEPS += $$OUT_PWD/../core/libcore.a

# lib quazip
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libs/3rdparty/quazip/quazip/release/ -lquazip
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libs/3rdparty/quazip/quazip/debug/ -lquazip
else:unix:!macx: LIBS += -L$$OUT_PWD/../libs/3rdparty/quazip/quazip/ -lquazip

INCLUDEPATH += $$PWD/../libs/3rdparty/quazip/quazip
DEPENDPATH += $$PWD/../libs/3rdparty/quazip/quazip

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../libs/3rdparty/quazip/quazip/release/quazip.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../libs/3rdparty/quazip/quazip/debug/quazip.lib
else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../libs/3rdparty/quazip/quazip/libquazip.a

# lib zlib
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libs/3rdparty/zlib/zlib/release/ -lzlib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libs/3rdparty/zlib/zlib/debug/ -lzlib
else:unix:!macx: LIBS += -L$$OUT_PWD/../libs/3rdparty/zlib/zlib/ -lzlib

INCLUDEPATH += $$PWD/../libs/3rdparty/zlib/zlib
DEPENDPATH += $$PWD/../libs/3rdparty/zlib/zlib

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../libs/3rdparty/zlib/zlib/release/zlib.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../libs/3rdparty/zlib/zlib/debug/zlib.lib
else:unix:!macx: PRE_TARGETDEPS += $$OUT_PWD/../libs/3rdparty/zlib/zlib/libzlib.a
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Wenn ich das nun compiliere, schlägt beim Linken der Application das Auflösen der Symbole fehl:
Fehler:undefined reference to `_imp___ZN6QuaZipC1ERK7QString'
Fehler:undefined reference to `_imp___ZN10QuaZipFile4openE6QFlagsIN9QIODevice12OpenModeFlagEE'
usw...

Jemand eine Idee?
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Ich habe auch schon versucht, wie in anderen Foren / Posts empfohlen, die betroffenen Libraries mehrfach zu linken:
-lquazip -lcore -lquazip
aber das funktioniert ebenfalls nicht. Auch das Ändern der Linking-Reihenfolge in allem möglichen Kombinationen hat nicht geholfen.
Ich versuche nun schon seit 2 Tagen dieses Problem zu fixen, aber ich finde einfach keine Lösung.
Habe ich eventuell eine der Libraries falsch erstellt?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QMake Problem: Linken von statischen Libraries

Beitrag von Christian81 »

gcc oder msvc? Hast Du beim Kompilieren deines Programms auch angegeben, dass Du quazip statisc linken willst? Die Funktionsnamen in der Fehlermeldung deuten nämlich nicht darauf hin...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Tritt bei gcc und msvc auf. Ich habe als Config-Parameter immer "staticlib" hinzugefügt.

Diese Config lag direkt dem QuaZip Projekt bei, ich habe nur "staticlib" der Config hinzugefügt:

TEMPLATE = lib
CONFIG += qt warn_on staticlib
QT -= gui
DEPENDPATH += .
INCLUDEPATH += .
VERSION = 1.0.0

DEFINES += QUAZIP_BUILD
CONFIG(staticlib): DEFINES += QUAZIP_STATIC

Aber stimmt, irgendwie sehen die Fehlermeldungen nach Dynamic Linking aus...
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Habe nun noch einmal geschaut: Im build-Verzeichnis landen nur .a bzw .lib Dateien, daher denke ich nicht, dass es als dynamic lib gebaut wurde.
Komisch... verstehe einfach nicht was hier schief geht.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QMake Problem: Linken von statischen Libraries

Beitrag von Christian81 »

Es geht ja nicht drum wie quazip gebaut wird sondern wie du dein Programm baust. Dort muss definitiv QUAZIP_STATIC definiert sein sonst sind die Symbole falsch (wie man sieht)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheGrudge2
Beiträge: 11
Registriert: 4. November 2012 10:27

Re: QMake Problem: Linken von statischen Libraries

Beitrag von TheGrudge2 »

Ja jetzt scheint es zu klappen, VIELEN DANK!!!!!

Jetzt wo du es sagst, isses ganz logisch :-)

Andi
Antworten