Qt Libs statisch linken

Alles rund um die Programmierung mit Qt
Antworten
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Qt Libs statisch linken

Beitrag von neosun »

Hi,

weiss jemand wie ich eigene libs in qt statisch dazu linke? Welchen Flag muss ich in dem .pro file setzen. Dynamisch funzt alles nur nicht statisch.
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

dazu musst du die qt-libs statisch bauen, einfach rekonfigurieren und
statisch wählen, einen anderen weg kenn ich leider nicht :)
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Beitrag von neosun »

ChMaster hat geschrieben:dazu musst du die qt-libs statisch bauen, einfach rekonfigurieren und
statisch wählen, einen anderen weg kenn ich leider nicht :)
Das ist ja bloed, ich will ja nicht die qt libs statisch linken sondern nur meine eigenen Sachen. Da muss es doch noch was anderes geben.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

neosun hat geschrieben:Das ist ja bloed, ich will ja nicht die qt libs statisch linken sondern nur meine eigenen Sachen. Da muss es doch noch was anderes geben.
Was meinst du denn mit "meinen eigenen Sachen" ? Das ist meistens so, dass man nur seine Programme dagegen linken will!?

Eine statische Version ist nichts anderes wie aller Source als Object Daten. Und um nur deine "eigenen Sachen" statisch zu linken brauchst alle Abhänigkeiten statisch.
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Beitrag von neosun »

FlorianBecker hat geschrieben:
neosun hat geschrieben:Das ist ja bloed, ich will ja nicht die qt libs statisch linken sondern nur meine eigenen Sachen. Da muss es doch noch was anderes geben.
Was meinst du denn mit "meinen eigenen Sachen" ? Das ist meistens so, dass man nur seine Programme dagegen linken will!?

Eine statische Version ist nichts anderes wie aller Source als Object Daten. Und um nur deine "eigenen Sachen" statisch zu linken brauchst alle Abhänigkeiten statisch.
Ich habe eigene geschriebene Libs und Libs aus dem Institut und ich benutze 3rd-party libs wie vtk (www.vtk.org) die ich statisch zu meinem qt programm linken will, so das ich nur ein binary weitergeben muss und nicht die ganzen libs. Ueblich ist dynamisch zu linken, wo ich aber alle libs mit geben muss, was ich nicht moechte.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Naja, ist doch aber kein Problem, alles statisch linken fertig.
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Beitrag von neosun »

FlorianBecker hat geschrieben:Naja, ist doch aber kein Problem, alles statisch linken fertig.
natuerlich ist das ein problem, wo bitte gebe ich das im .pro file an.

die libs habe ich mit LIBS = -L/usr/local/lib und -lvtkIO -lvtkRendering usw. angeben, wie weiss jetzt aber qmake das er sie statisch linken soll. Das funzt nicht. Da ja qmake das Makefile generiert.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Mh, du liest schon den gleichen Beitrag, oder?

Um statisch zu linken, müssen die Libs auch statisch vorliegen!!!!! Und wenn diese statisch vorliegen Link er das schon selber. Falls du wissen willst, wie man expliziet gegen die .a Libs linkt:
LIBS += /weg/zu/meiner/lib.a
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Beitrag von neosun »

FlorianBecker hat geschrieben:Mh, du liest schon den gleichen Beitrag, oder?

Um statisch zu linken, müssen die Libs auch statisch vorliegen!!!!! Und wenn diese statisch vorliegen Link er das schon selber. Falls du wissen willst, wie man expliziet gegen die .a Libs linkt:
LIBS += /weg/zu/meiner/lib.a
Wenn es sowaere wuerde ich nicht fragen. Er macht es naemlich nicht. Ich bekomme eine menge error messages.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Aha, also hast du nicht das Problem des statischen linkens, sondern der statischen Bibliotheken.

Warum kommen Fehler Mitteilungen?
Weil die Libs nicht korrekt auf statisch linken abgestimmt sind.
Weil Sie nicht korrekt statisch gebaut sind.

Also wenn das der Fall ist, dann kannst du es vergessen, denn dann wird statisches linken mit den Libs nicht funktionieren. Die Qt Lib kann statisch gelinkt werden. Aber ich hatte durchaus auch schon Libs, wie mal eine libxml2 Version, die man nicht linken konnte, ich habe es dann gelassen. Vielleicht geht es immernoch nicht. Vielleicht müsste man die auch nur anders bauen, aber ab hier gab es einen Punkt, wo sich das statische linken einfach nicht mehr den Aufwand abgefangen hätte.

Und vielleicht bist du nicht immer so unfreundlich. Ich habe dir schließlich nichts getan.
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Beitrag von neosun »

FlorianBecker hat geschrieben:Aha, also hast du nicht das Problem des statischen linkens, sondern der statischen Bibliotheken.

Warum kommen Fehler Mitteilungen?
Weil die Libs nicht korrekt auf statisch linken abgestimmt sind.
Weil Sie nicht korrekt statisch gebaut sind.

Also wenn das der Fall ist, dann kannst du es vergessen, denn dann wird statisches linken mit den Libs nicht funktionieren. Die Qt Lib kann statisch gelinkt werden. Aber ich hatte durchaus auch schon Libs, wie mal eine libxml2 Version, die man nicht linken konnte, ich habe es dann gelassen. Vielleicht geht es immernoch nicht. Vielleicht müsste man die auch nur anders bauen, aber ab hier gab es einen Punkt, wo sich das statische linken einfach nicht mehr den Aufwand abgefangen hätte.

Und vielleicht bist du nicht immer so unfreundlich. Ich habe dir schließlich nichts getan.
Entschuldige bitte wenn ich so unfreundlich war, war nicht mit Absicht!

Also die vtk libs die ich benutze werden bei anderen Projekte wo nicht qt drin vorkommt meist mit MFC ohne Probleme statisch gelink, ich habe es heute nochmal mit einer anderen Application getestet. Es liegt irgendwo an Qt.

Wenn ich es auf MacOSX versuche, bekomme ich folgende error message.

ld: 3rd-party/mac/lib/vtk/libvtkCommon.a(vtkMultiThreader.o) illegal reference to symbol: _MPProcessors defined in indirectly referenced dynamic library /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
ld: 3rd-party/mac/lib/vtk/libvtkRendering.a(vtkCarbonRenderWindowInteractor.o) illegal reference to symbol: _CallNextEventHandler defined in indirectly referenced dynamic library /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
ld: 3rd-party/mac/lib/vtk/libvtkRendering.a(vtkCarbonRenderWindow.o) illegal reference to symbol: _GetDeviceList defined in indirectly referenced dynamic library /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD

Vielleicht kann ja jemand was damit anfangen.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Mh, also die Fehlermitteilung sagt aber aus, dass der Fehler in der libvtkCommon.a liegt.

Warum geht statisch linken mit anderen Programmen trotzdem?
Weil die anderen statisch gelinkten Programme nicht die in der Fehlermitteilung beschriebenen Funktionen benötigt.
neosun
Beiträge: 11
Registriert: 18. April 2005 21:18

Beitrag von neosun »

FlorianBecker hat geschrieben:Mh, also die Fehlermitteilung sagt aber aus, dass der Fehler in der libvtkCommon.a liegt.

Warum geht statisch linken mit anderen Programmen trotzdem?
Weil die anderen statisch gelinkten Programme nicht die in der Fehlermitteilung beschriebenen Funktionen benötigt.
Ja kann sein. Ich werde es jetzt dynamisch linken und gut. Sonst wird man ja nie fertig. Trotzdem danke.
Antworten