Incompatible Qt Libaray

Alles rund um die Programmierung mit Qt
Antworten
rafael9707s
Beiträge: 22
Registriert: 15. Juni 2012 14:27
Wohnort: Berlin
Kontaktdaten:

Incompatible Qt Libaray

Beitrag von rafael9707s »

Ich hatte Qt selber kompilet weil die Qt Multimedia weder bei Ubuntu oder Debian dabei ist
Die Anwendung wurde erfolgrech kompilet die ich machen wollte, aber da kam der eine Fehler..

Code: Alles auswählen

qt@keppe:~/projects/build-KeppeChatClient-Qt_4_8_4_Keppe_Edition_amd64-Release$ ./KeppeChatClient
Cannot mix incompatible Qt library (version 0x40803) with this library (version 0x40804)
Abgebrochen (Speicherabzug geschrieben)
qt@keppe:~/projects/build-KeppeChatClient-Qt_4_8_4_Keppe_Edition_amd64-Release$  
Und zwar versucht mein Linux die Qt 4.8.3 für die anderen zu nehmen, nur die Multimedia nehmt Qt 4.8.4

Wie erzwinge ich meine Anwendung die Komponeten in den Ordner zu nehmen wo die Anwendung läuft.

Bevor es bei mir nicht geht mach ich nebend kein .deb Paket.
Arbeite an einen Messagingnetzwerk Keppe Messenger
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Incompatible Qt Libaray

Beitrag von Christian81 »

Stichwort LD_LIBRARY_PATH und LD_RUN_PATH
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rafael9707s
Beiträge: 22
Registriert: 15. Juni 2012 14:27
Wohnort: Berlin
Kontaktdaten:

Re: Incompatible Qt Libaray

Beitrag von rafael9707s »

ja, das habe ich ja schon in ein Shell Skript versucht, mit LD_RUN_PATH habe ich es gemacht, das hatte ich gerade probiert
gibt es sonst irgendwie eine Möglichkeit direkt die Datei zu erzwingen oder so..

Das Problem besteht weiterhin mit den Incompatible..
Arbeite an einen Messagingnetzwerk Keppe Messenger
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Incompatible Qt Libaray

Beitrag von Christian81 »

LD_RUN_PATH ist keine Umgebungsvariable und wenn Du LD_LIBRARY_PATH richtig setzt dann wird auch die richtige Library angezogen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rafael9707s
Beiträge: 22
Registriert: 15. Juni 2012 14:27
Wohnort: Berlin
Kontaktdaten:

Re: Incompatible Qt Libaray

Beitrag von rafael9707s »

Könntest du mir ein Beispiel Skript geben, weil es währe sehr nett :)
Arbeite an einen Messagingnetzwerk Keppe Messenger
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Incompatible Qt Libaray

Beitrag von Christian81 »

export LD_LIBRARY_PATH=/pfad/zu/qt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Incompatible Qt Libaray

Beitrag von RHBaum »

Wie erzwinge ich meine Anwendung die Komponeten in den Ordner zu nehmen wo die Anwendung läuft.
Beschaeftige dich mal mit dem LD mechanismus, und wie das unter linux funktioniert.

Wenn du selber linkst, kannst du in deinem configure, oder buildtool, je nachdem was du verwendest, selektiv die genaue version bestimmen ...
beispielsweisse kannst du auf 4.8.3 setzen, dann nimmt er nur die 4.8.3
setzt du auf 4.8, nimmt er die neuste 4.8er die du installiert hasst, waere dann 4.8.4 vielleicht, oder gar 4.8.6 (je nachdem was dein packetmanager installiert hat)
setzt du nur auf 4 ... wuerde er auch die die neuste 4er nehmen, da es noch keine hoehere als 4.8 gibt, wuerde es auch die neuste 4.8er ....
usw.
Das wenn du die System libs verwenden willst ...

Wenn du deine eigenen verwenden willst
um die gleichen QT libs anzuziehen, wuerd ich aber nicht dein System mit dem LD verbiegen ....
Du hasst doch deine selbstcompilierten QT module in einem seperaten verzeichniss liegen, oder hasst die "schon" ins LD system integriert?
Wenn nicht, musst qmake "nur" beibringen, nicht im LD zu suchen, sondern in deinem eigenen Pfad ...
kenn mich mit qmake nicht so aus, aber es wird sicher ne möglichkeit geben, systembibliothek verzeichnisse auszuschleissen und eigene hinzuzunehmen.
Gilt dann nur fuer dein project (.pro)...

Besser waer, nen packet zu finden, womit qtmultimedia auf dein system ueber den packagemanger bekommst ... sonst muesstest wenn dein eigenes project distribitueren willst, immer ne eigene version der qt mit ausliefern ... weil ueber die LD pfade sonst mit grosser wahrscheinlichkeit ichmatsch kommt ... oder unaufloesbare abhaengigkeiten.

Ciao ...







Ciao ...
rafael9707s
Beiträge: 22
Registriert: 15. Juni 2012 14:27
Wohnort: Berlin
Kontaktdaten:

Re: Incompatible Qt Libaray

Beitrag von rafael9707s »

Also er darf die "nicht" von dpkg installierten Komponeten nehmen
Ich will die 4.8.4 erzwingen, sonst geht das nicht, weil er bei mir die Qt 4.8.3 mit meine Qt 4.8.4 mischt
Arbeite an einen Messagingnetzwerk Keppe Messenger
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Incompatible Qt Libaray

Beitrag von RHBaum »

Ist statisch linken (keine LGPL,also GPL / Commerziell ) für dich ne Option ?

Ansonsten:
Ich will die 4.8.4 erzwingen
Ist wohl eher das Problem !

Also ein packet zu bauen, was dir eine qt version (4.8.4) ordnungsgemäss in die LD Pfade einbaut, würd ich dir abraten. Lass das lieber die Package-Maintainer der Distries machen :-)

ALso musst sicherstellen, das dein Binary deine (lokale) Version der QT komplett anzieht.

kompilierst du dazu die (komplette) Qt selber ?
Da gäbs Wege, ueber prefix und Postfix variablen eindeutige Dateiindentifizierer zu generieren, so das deine version der qt sich namentlich von dem des Systems nicht nur durch die version unterscheidet.
Macht vielleicht einiges "ersichtlicher" ansonsten ists aber nicht wirklich notig.

Generell musst du nur dafür sorgen, das deine version der qt vor der im system angezogen wird ....

zur compile/linkzeit ist klar, wie auf die richtigen haeder und libs verweisst ?

LD_LIBRARY_PATH kommt zur laufzeit zum tragen, und bestimmt, wie und in welcher reihenfolge die Pfade nach den "shared objects" durchsucht werden.
Das heisst, du musst zur laufzeit deines binaries die "LD_LIBRARY_PATH" modifiziert haben ....
(Bei Debian/Ubuntu zumindest muss dein Pfad vor dem rest stehen, also deine angaben vorn dran haengen.
Keine ahnung wie es bei anderen Distries war ... in der vergangenheit hab ich eher die erfahrung gemacht, das sich alles immer irgendwie anders verhaelt :-) hab allerdings lange auch nix mehr mit Linux gemacht. )

Leider "linkst" du wahrscheinlich gegen die .so, so dass die shared libs ueber den startcode angezogen wird. Aka du hasst kaum möglichkeiten in deinem programm/binary davor irgendwelchen code auszufuehren und die LD_LIBRARY_PATH zu modifizieren.

Einfachster und unkonventionellster weg, zum entwickeln sowieso .... binary ueber startscript starten, was die Variable modifiziert ....

Machen auch viele Linux programme und distitrubutieren die so .... Ich finds eher unelegant.
Ich wuerd nen 2tes Binary spendieren, was deine eigenetliches binary startet und vorher alles richtig einstellt ....

Ciao ...
Antworten