Linker Probleme mit verschiedenen Qt-Versionen

Alles zu Entwicklungsumgebungen und Editoren für Qt
Antworten
heimdal
Beiträge: 2
Registriert: 18. Mai 2011 22:38

Linker Probleme mit verschiedenen Qt-Versionen

Beitrag von heimdal »

Hallo Qt-Community,

ich habe folgendes Problem:

Ich habe auf meinem PC OpenSUSE 11.4 installiert. Als Desktop Umgebung läuft KDE4 (version 4.6.0).
Dementsprechend liegen unter

Code: Alles auswählen

/usr/lib64
Qt-Libs in version 4.7.1 vor. Desweiteren habe ich die neueste version des Qt-Frameworks von der Qt-Homepage geladen und sie auf meinem Rechner der Anleitung nach übersetzt. Qt-4.7.3 liegt nun unter

Code: Alles auswählen

/usr/local/Trolltech/Qt-4.7.3/
Ich habe nun versucht Anwendungen die ich auf einem Debian System geschrieben habe auf diesem System zu starten. Das kompilieren funktioniert tadellos, ich übersetzte die Anwendung mit

Code: Alles auswählen

$ make distclean
$ qmake CONFIG+=debug
$ make 
Versuche ich jedoch danach das Programm zu starten bekomme ich folgenden Fehler ausgegeben:

Code: Alles auswählen

$ ./kinectApp1 
Cannot mix incompatible Qt library (version 0x40701) with this library (version 0x40703)
Abgebrochen
Der Verdacht liegt nun nahe das die falschen Libs gelinkt werden. Also habe ich mir angeschaut welche Abhängigkeiten bei Qt für diese Anwendungen bestehen:

Code: Alles auswählen

$ ldd kinectApp1 | grep libQt
libQtGui.so.4 => /usr/local/Trolltech/Qt-4.7.3/lib/libQtGui.so.4 (0x00007fdc1e499000)
libQtCore.so.4 => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCore.so.4 (0x00007fdc1dfee000)
Soweit sogut, weiterhin habe ich mir die Qt-libs ausgeben lassen die im cache liegen:

Code: Alles auswählen

# ldconfig -p | grep libQt
  libQt3Support.so.4 (libc6,x86-64) => /usr/lib64/libQt3Support.so.4
        libQtXmlPatterns.so.4 (libc6,x86-64) => /usr/lib64/libQtXmlPatterns.so.4
        libQtXml.so.4 (libc6,x86-64) => /usr/lib64/libQtXml.so.4
        libQtWebKit.so.4 (libc6,x86-64) => /usr/lib64/libQtWebKit.so.4
        libQtTest.so.4 (libc6,x86-64) => /usr/lib64/libQtTest.so.4
        libQtSvg.so.4 (libc6,x86-64) => /usr/lib64/libQtSvg.so.4
        libQtSql.so.4 (libc6,x86-64) => /usr/lib64/libQtSql.so.4
        libQtScriptTools.so.4 (libc6,x86-64) => /usr/lib64/libQtScriptTools.so.4
        libQtScript.so.4 (libc6,x86-64) => /usr/lib64/libQtScript.so.4
        libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib64/libQtOpenGL.so.4
        libQtNetwork.so.4 (libc6,x86-64) => /usr/lib64/libQtNetwork.so.4
        libQtMultimedia.so.4 (libc6,x86-64) => /usr/lib64/libQtMultimedia.so.4
        libQtHelp.so.4 (libc6,x86-64) => /usr/lib64/libQtHelp.so.4
        libQtGui.so.4 (libc6,x86-64) => /usr/lib64/libQtGui.so.4
        libQtDesignerComponents.so.4 (libc6,x86-64) => /usr/lib64/libQtDesignerComponents.so.4
        libQtDesigner.so.4 (libc6,x86-64) => /usr/lib64/libQtDesigner.so.4
        libQtDeclarative.so.4 (libc6,x86-64) => /usr/lib64/libQtDeclarative.so.4
        libQtDBus.so.4 (libc6,x86-64) => /usr/lib64/libQtDBus.so.4
        libQtCore.so.4 (libc6,x86-64) => /usr/lib64/libQtCore.so.4
        libQtCLucene.so.4 (libc6,x86-64) => /usr/lib64/libQtCLucene.so.4
Die Libs oder Links auf die Libs(?) liegen scheinbar nur für die 4.7.1 Version im cache,
ich denke daher rührt auch das Problem. Testweise habe ich die Qt-Libs aus /usr/lib64
verschoben, und dann das Programm erneut gestartet welches dann auch ohne Probleme geklappt hat. Allerdings kann das ja keine permanente Lösung sein :) .

Mein erster Versuch war die $LD_LIBRARY_PATH zu erweitern um das Qt-4.7.3 Verzeichnis und anschliessend zu exportieren, dies wurde in die .bashrc eingetragen und die bash neu gestartet, dies führte allerdings keine Änderung herbei.

Mein zweiter Versuch war ein direkter Eintrag des pfades in die /etc/ld.so.conf und
danach das ausführen von ldconfig. Danach liegen zwar die 4.7.3 Libs im cache aber eben auch die 4.7.1 Libs

Code: Alles auswählen

# ldconfig -p | grep libQt
        libQt3Support.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQt3Support.so.4
        libQt3Support.so.4 (libc6,x86-64) => /usr/lib64/libQt3Support.so.4
        libQt3Support.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQt3Support.so
        libQtXmlPatterns.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtXmlPatterns.so.4
        libQtXmlPatterns.so.4 (libc6,x86-64) => /usr/lib64/libQtXmlPatterns.so.4
        libQtXmlPatterns.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtXmlPatterns.so
        libQtXml.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtXml.so.4
        libQtXml.so.4 (libc6,x86-64) => /usr/lib64/libQtXml.so.4
        libQtXml.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtXml.so
        libQtWebKit.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtWebKit.so.4
        libQtWebKit.so.4 (libc6,x86-64) => /usr/lib64/libQtWebKit.so.4
        libQtWebKit.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtWebKit.so
        libQtTest.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtTest.so.4
        libQtTest.so.4 (libc6,x86-64) => /usr/lib64/libQtTest.so.4
        libQtTest.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtTest.so
        libQtSvg.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtSvg.so.4
        libQtSvg.so.4 (libc6,x86-64) => /usr/lib64/libQtSvg.so.4
        libQtSvg.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtSvg.so
        libQtSql.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtSql.so.4
        libQtSql.so.4 (libc6,x86-64) => /usr/lib64/libQtSql.so.4
        libQtSql.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtSql.so
        libQtScriptTools.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtScriptTools.so.4
        libQtScriptTools.so.4 (libc6,x86-64) => /usr/lib64/libQtScriptTools.so.4
        libQtScriptTools.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtScriptTools.so
        libQtScript.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtScript.so.4
        libQtScript.so.4 (libc6,x86-64) => /usr/lib64/libQtScript.so.4
        libQtScript.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtScript.so
        libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib64/libQtOpenGL.so.4
        libQtNetwork.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtNetwork.so.4
        libQtNetwork.so.4 (libc6,x86-64) => /usr/lib64/libQtNetwork.so.4
        libQtNetwork.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtNetwork.so
        libQtMultimedia.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtMultimedia.so.4
        libQtMultimedia.so.4 (libc6,x86-64) => /usr/lib64/libQtMultimedia.so.4
        libQtMultimedia.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtMultimedia.so
        libQtHelp.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtHelp.so.4
        libQtHelp.so.4 (libc6,x86-64) => /usr/lib64/libQtHelp.so.4
        libQtHelp.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtHelp.so
        libQtGui.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtGui.so.4
        libQtGui.so.4 (libc6,x86-64) => /usr/lib64/libQtGui.so.4
        libQtGui.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtGui.so
        libQtDesignerComponents.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtDesignerComponents.so.4
        libQtDesignerComponents.so.4 (libc6,x86-64) => /usr/lib64/libQtDesignerComponents.so.4
        libQtDesignerComponents.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtDesignerComponents.so
        libQtDesigner.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtDesigner.so.4
        libQtDesigner.so.4 (libc6,x86-64) => /usr/lib64/libQtDesigner.so.4
        libQtDesigner.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtDesigner.so
        libQtDeclarative.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtDeclarative.so.4
        libQtDeclarative.so.4 (libc6,x86-64) => /usr/lib64/libQtDeclarative.so.4
        libQtDeclarative.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtDeclarative.so
        libQtDBus.so.4 (libc6,x86-64) => /usr/lib64/libQtDBus.so.4
        libQtCore.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCore.so.4
        libQtCore.so.4 (libc6,x86-64) => /usr/lib64/libQtCore.so.4
        libQtCore.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCore.so
        libQtCLucene.so.4 (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCLucene.so.4
        libQtCLucene.so.4 (libc6,x86-64) => /usr/lib64/libQtCLucene.so.4
        libQtCLucene.so (libc6,x86-64) => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCLucene.so
Daher wieder der selbe Fehler wie vorher. Im Moment bin ich leider ein wenig ratlos wie ich diese Problem löse, ich finde es auch relativ seltsam, das das ändern der $LD_LIBRARY_PATH nichts bewirkt. Wenn jemand ein Lösung parat hat wäre ich sehr dankbar :) .
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was sagt

Code: Alles auswählen

which qmake
Liegt das der 4.7.3 auch in /usr/local/bin? (sollte ja, wenn du den PREFIX auf /usr/local gestellt hast).

Ansonsten:
Es gibt in opensuse sicherlich ein repository, welches das aktuelle (und damit die 4.7.3er) Qt zur Verfügung stellt. Es ist wohl das einfachste, diese direkt als "Haupt-Qt" ins System zu stopfen, und die 4.7.1 damit komplett runter zu hauen ;)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

franzf hat geschrieben: Es gibt in opensuse sicherlich ein repository, welches das aktuelle (und damit die 4.7.3er) Qt zur Verfügung stellt. Es ist wohl das einfachste, diese direkt als "Haupt-Qt" ins System zu stopfen, und die 4.7.1 damit komplett runter zu hauen ;)
Korrekt - das ist das einfachste: http://download.opensuse.org/repositories/KDE:/Qt/
Das andere kann nicht gehen da LD_LIBRARY_PATH nicht korrekt gesetzt wurde...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
heimdal
Beiträge: 2
Registriert: 18. Mai 2011 22:38

Beitrag von heimdal »

Hallo,

also

Code: Alles auswählen

$ which qmake
/usr/local/Trolltech/Qt-4.7.3/bin/qmake
das kam bei which raus. Ich habe den Tipp mit dem Repository befolgt,
jetzt funktioniert es, dankeschön!
Antworten