Statisch linken

Alles rund um die Programmierung mit Qt
Antworten
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

Statisch linken

Beitrag 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
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag 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
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

Beitrag 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
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag 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
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

Beitrag 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
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag 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
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag 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
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

Beitrag 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
Antworten