[SOLVED] QMake Problem: Linken von statischen Libraries
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
[SOLVED] QMake Problem: Linken von statischen Libraries
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?
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.
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
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
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
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
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
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
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
Wenn ich das nun compiliere, schlägt beim Linken der Application das Auflösen der Symbole fehl:
Jemand eine Idee?
usw...Fehler:undefined reference to `_imp___ZN6QuaZipC1ERK7QString'
Fehler:undefined reference to `_imp___ZN10QuaZipFile4openE6QFlagsIN9QIODevice12OpenModeFlagEE'
Jemand eine Idee?
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
Ich habe auch schon versucht, wie in anderen Foren / Posts empfohlen, die betroffenen Libraries mehrfach zu linken:
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?
aber das funktioniert ebenfalls nicht. Auch das Ändern der Linking-Reihenfolge in allem möglichen Kombinationen hat nicht geholfen.-lquazip -lcore -lquazip
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?
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QMake Problem: Linken von statischen Libraries
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
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:
Aber stimmt, irgendwie sehen die Fehlermeldungen nach Dynamic Linking aus...
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...
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
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.
Komisch... verstehe einfach nicht was hier schief geht.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QMake Problem: Linken von statischen Libraries
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
- Beiträge: 11
- Registriert: 4. November 2012 10:27
Re: QMake Problem: Linken von statischen Libraries
Ja jetzt scheint es zu klappen, VIELEN DANK!!!!!
Jetzt wo du es sagst, isses ganz logisch
Andi
Jetzt wo du es sagst, isses ganz logisch
Andi