Seite 1 von 1

Linker Probleme mit verschiedenen Qt-Versionen

Verfasst: 21. Mai 2011 14:52
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 :) .

Verfasst: 22. Mai 2011 12:06
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 ;)

Verfasst: 22. Mai 2011 12:23
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...

Verfasst: 23. Mai 2011 09:15
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!