Seite 1 von 1

Statisch linken

Verfasst: 16. August 2004 14:21
von Lykurg
Hi,

wenn ich mein Programm normal compiliere ist alles super, wenn ich es dann statisch linken will (mit LIBS += -static) bekomm ich einen großen Haufen Fehlermeldungen:
  • *g++ -o ../bin/kalodidaskalos c_config.o c_ladedatei.o [...] -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -static -lqt-mt -lXext -lX11 -lm -lpthread
    */usr/lib/qt3/lib//libqt-mt.a(qfileinfo_unix.o)(.text+0x63c): In function `QFileInfo::group() const':
    *: warning: Using 'getgrgid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    [...]
    *c_ladedatei.o(.text+0x11a7): In function `c_ladeDatei::speicherDaten(QStringList const&, QString const&)':
    *: undefined reference to `gzopen'
    *c_ladedatei.o(.text+0x11cc): In function `c_ladeDatei::speicherDaten(QStringList const&, QString const&)':
    *: undefined reference to `gzwrite'
    [...]
    */usr/lib/qt3/lib//libqt-mt.a(qpixmap_x11.o)(.text+0x7151): In function `QPixmap::xForm(QWMatrix const&) const':
    *: undefined reference to `XftDrawCreateAlpha'
    [...]
    */usr/lib/qt3/lib//libqt-mt.a(qpngio.o)(.text+0x5a8): In function `setup_qt(QImage&, png_struct_def*, png_info_struct*, float)':
    *: undefined reference to `png_get_valid'
    [...]
    */usr/lib/qt3/lib//libqt-mt.a(qlibrary_unix.o)(.text+0x28): In function `QLibraryPrivate::resolveSymbol(char const*)':
    *: undefined reference to `dlsym'
    */usr/lib/qt3/lib//libqt-mt.a(qlibrary_unix.o)(.text+0x75): In function `QLibraryPrivate::freeLibrary()':
    *: undefined reference to `dlclose'
    */usr/lib/qt3/lib//libqt-mt.a(qlibrary_unix.o)(.text+0xff): In function `QLibraryPrivate::loadLibrary()':
    *: undefined reference to `dlopen'
    *collect2: ld returned 1 exit status
    *gmake[1]: *** [../bin/kalodidaskalos] Fehler 1
    *gmake[1]: Das Target »first« wurde wegen Fehlern nicht aktualisiert.
    *gmake: *** [sub-src] Fehler 2
    *gmake: Das Target »first« wurde wegen Fehlern nicht aktualisiert.
Mein dazugehöriges *.pro lautet:

Code: Alles auswählen

SOURCES += c_config.cpp \
           c_ladedatei.cpp \
           [...]
HEADERS += c_config.h \
           c_ladedatei.h \
           [...]
IDLS += ui_geladen.ui \
        ui_kasten_klein_abfrage.ui \
        [...]
FORMS += ui_geladen.ui \
         ui_kasten_klein_abfrage.ui \
         [...]
TEMPLATE = app 
ui_geladen.ui.target = ui_geladen.ui 
ui_geladen.ui.commands = $$IDL_COMPILER $$IDL_OPTIONS $$ui_geladen.ui.target 
ui_kasten_klein_abfrage.ui.target = ui_kasten_klein_abfrage.ui 
ui_kasten_klein_abfrage.ui.commands = $$IDL_COMPILER $$IDL_OPTIONS $$ui_kasten_klein_abfrage.ui.target 
[...]
CONFIG += release \
          warn_on \
          qt \
          thread 
TARGET = ../bin/kalodidaskalos 
Wo muss ich ansetzten um die Fehler wegzubekommen? Sorry, aber da hört meine Kenntnis völlig auf, sodass ich nicht den kleinsten Ansatzpunkt sehe.

Falls von Interesse, benutze SuSE 9.1 mit QT 3.3.2, und habe auch sämtliche rpm's installiert.

Danke,
Lykurg

Verfasst: 16. August 2004 18:50
von miketech
Hi,

hab das auch mal gerade bei mir versucht, da funktionierts auch nicht :) Ich habe mittlerweile rausgefunden, dass man wohl -static beim Kompilieren von Qt angeben muss, damit die Static Libraries erstellt werden. Hast Du in Deinem Verzeichnis $QTDIR/lib/ ein paar Dateien mit der Endung ".a"? Z.B. libqt-mt.a?

Gruß

Mike

Verfasst: 17. August 2004 05:52
von Lykurg
Hi,

ja hab ich!

/usr/lib/qt3/lib> ls
libdesignercore.a
libqt.a
libqt-mt.so.3.3
libqt.so.3.3.2
libdesignercore.prl
libqt-mt.a
libqt-mt.so.3.3.2
libqui.prl
libeditor.a
libqt-mt.la
libqt.prl
libqui.so
libeditor.prl
libqt-mt.prl
libqt.so
libqui.so.1
libqassistantclient.a
libqt-mt.so
libqt.so.3
libqui.so.1.0
libqassistantclient.prl
libqt-mt.so.3
libqt.so.3.3
libqui.so.1.0.0

Hmm, ich seh schon, dass das ne schwere Geburt werden wird!:cry:

Danke,
Lykurg

Verfasst: 17. August 2004 11:24
von miketech
Ja ich befürchte es auch :) Google und Co geben auch nicht wirklich viele Infos. Das Thema wurde schon oft woanders angesprochen, aber es gibt oft nur die Frage und keine wirklich hilfreiche Antwort.

Versuch mal auf folgende Art zu Linken:

g++ -o ../bin/kalodidaskalos *.o /usr/lib/qt3/lib/libqt.a /usr/lib/qt3/lib/libqt-mt.a -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -static -lXext -lX11 -lm -lpthread

Also, dass Du die libqt.a und libqt-mt.a direkt mit an gibst, wie die anderen Object-Files.

Gruß

Mike

Verfasst: 17. August 2004 12:58
von Lykurg
miketech hat geschrieben:g++ -o ../bin/kalodidaskalos *.o /usr/lib/qt3/lib/libqt.a /usr/lib/qt3/lib/libqt-mt.a -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -static -lXext -lX11 -lm -lpthread
Funktioniert leider auch nicht:(
Selben Fehlermeldungen!

Lykurg

Verfasst: 17. August 2004 13:03
von miketech
Hmmm, und wie ist es mit einem:

g++ -o ../bin/kalodidaskalos *.o /usr/lib/qt3/lib/libqt.a /usr/lib/qt3/lib/libqt-mt.a /usr/X11R6/lib/libX11.a /usr/X11R6/lib/libXext.a /usr/lib/libpthread.a /usr/lib/libm.a -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -static

Bzw.:

g++ -o ../bin/kalodidaskalos *.o /usr/lib/qt3/lib/libqt.a /usr/lib/qt3/lib/libqt-mt.a /usr/X11R6/lib/libX11.a /usr/X11R6/lib/libXext.a /usr/lib/libpthread.a /usr/lib/libm.a -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/

? Die Pfade von den Libs musst Du natürlich noch anpassen.


Gruß

Mike

Verfasst: 17. August 2004 13:05
von miketech
Ah ich seh grad, dass er auch dlopen usw. nicht findet.

Ergänze eventuell noch:

/usr/lib/libdl.a

Oder -ldl am Ende.

Gruß

Mike

Verfasst: 20. August 2004 06:30
von Lykurg
Danke, hab jetzt alles ausprobiert, aber funktioniert trotzdem nicht!

Ich leg das statisch linken jetzt erst mal aufs Eis, da es wichtigere Dinge gibt. Wenn ich es wieder anpacke malde ich mich wieder vertrauensvoll an das Board ;)

Lykurg