Seite 1 von 1
[SOLVED] QMake Problem: Linken von statischen Libraries
Verfasst: 22. Januar 2013 22:50
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?
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 22. Januar 2013 22:52
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
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 22. Januar 2013 22:54
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
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 22. Januar 2013 22:55
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
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 22. Januar 2013 22:58
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?
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 24. Januar 2013 00:12
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?
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 24. Januar 2013 06:43
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...
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 24. Januar 2013 14:00
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...
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 24. Januar 2013 20:31
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.
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 24. Januar 2013 22:00
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)
Re: QMake Problem: Linken von statischen Libraries
Verfasst: 24. Januar 2013 23:04
von TheGrudge2
Ja jetzt scheint es zu klappen, VIELEN DANK!!!!!
Jetzt wo du es sagst, isses ganz logisch
Andi