Seite 1 von 1
Qt Libs statisch linken
Verfasst: 18. April 2005 21:21
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.
Verfasst: 19. April 2005 00:30
von ChMaster
dazu musst du die qt-libs statisch bauen, einfach rekonfigurieren und
statisch wählen, einen anderen weg kenn ich leider nicht

Verfasst: 19. April 2005 06:13
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.
Verfasst: 19. April 2005 09:01
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.
Verfasst: 19. April 2005 09:48
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.
Verfasst: 19. April 2005 10:06
von FlorianBecker
Naja, ist doch aber kein Problem, alles statisch linken fertig.
Verfasst: 19. April 2005 11:21
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.
Verfasst: 19. April 2005 11:25
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
Verfasst: 19. April 2005 13:43
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.
Verfasst: 19. April 2005 13:47
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.
Verfasst: 19. April 2005 19:05
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.
Verfasst: 19. April 2005 19:10
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.
Verfasst: 19. April 2005 19:49
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.