Die Installation von Octave-4.0.0 auf CentOS führt zu einem QtOpenGL-Verbindungsfehler

1199
irritable_phd_syndrom

Ich versuche gerade, Octave-4.0.0 auf einem CentOS 6-Cluster zu installieren. Octave hat mehr als 20 Abhängigkeiten und es ist unklar, welche Versionen jeder Abhängigkeit verwendet werden sollen. Da es yumnur Octave-3.4.3 gibt, habe ich Octave-3.4.3 yummit der Hoffnung installiert, dass ich die Mehrheit der Abhängigkeiten richtig machen würde. Ich musste auch installieren (via yum)

arpack-devel-3.1.3-1.el6.x86_64 fltk-devel-1.1.10-1.el6.x86_64 gl2ps-devel-1.3.5-1.el6.x86_64 glpk-devel-4.40-1.1.el6.x86_64 qhull-devel-2003.1-14.el6.x86_64 qrupdate-devel-1.1.2-1.el6.x86_64 qscintilla-devel-2.4-1.el6.x86_64 suitesparse-devel-3.4.0-9.el6.x86_64 

und von der Quelle

pcre-8.36 

Ich führe auto config aus:

./configure JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/" CPPFLAGS="-I/home/path/to/user/local/include" --prefix=/home/path/to/user/local/ --with-blas=/usr/lib64/atlas/libf77blas.so.3 --with-lapack=/usr/lib64/atlas/liblapack.so.3 

Es scheint alles gut zu finden, und wenn ich das laufe make, dauert es etwa 30 Minuten, bis es kompiliert wird.

. . . make[2]: Entering directory /gpfs0/home/path/to/user/local/src/octave-4.0.0/src' CXX octave_gui-main-gui.o CXXLD octave-gui /usr/lib64/libQtOpenGL.so.4: undefined reference to 'QWidgetPrivate::checkWindowRole()'` /usr/lib64/libQtOpenGL.so.4: undefined reference to 'QPaintEngineEx::drawPixmaps(QDrawPixmaps::Data const*, int, QPixmap const&, QFlags<QDrawPixmaps::DrawingHint>)' /usr/lib64/libQtOpenGL.so.4: undefined reference to 'QTextureGlyphCache::populate(QTextItemInt const&, QVarLengthArray<unsigned int, 256> const&, QVarLengthArray<QFixedPoint, 256> const&)' /usr/lib64/libQtNetwork.so.4: undefined reference to 'QObjectPrivate::checkWindowRole()' collect2: error: ld returned 1 exit status make[2]: *** [octave-gui] Error 1 make[2]: Leaving directory '/gpfs0/home/path/to/user/local/src/octave-4.0.0/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory '/gpfs0/home/path/to/user/local/src/octave-4.0.0' make: *** [all] Error 2 

In dem von auto conf erzeugten Makefile scheint es, dass es korrekt zu den Qt-Bibliotheken verlinkt werden sollte, dh

. . . QT_CFLAGS = -DQT_SHARED -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtNetwork -I/usr/include/Q tOpenGL QT_CPPFLAGS = -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtNetwork -I/usr/include/QtOpenGL QT_LDFLAGS = QT_LIBS = -lQtNetwork -lQtOpenGL -lQtGui -lQtCore -lqscintilla2 . . . 

In / usr / lib64 / habe ich den Inhalt der Qt-Bibliotheken überprüft

$ for i in *Qt*.so.4.6.2; do echo $i; nm -C -D $i | grep -i checkWindowRole; done libQt3Support.so.4.6.2 U QObjectPrivate::checkWindowRole() U QWidgetPrivate::checkWindowRole() libQtAssistantClient.so.4.6.2 libQtCLucene.so.4.6.2 libQtCore.so.4.6.2 00000000001657b0 T QObjectPrivate::checkWindowRole() libQtDBus.so.4.6.2 U QObjectPrivate::checkWindowRole() libQtDesignerComponents.so.4.6.2 libQtDesigner.so.4.6.2 libQtGui.so.4.6.2 U QObjectPrivate::checkWindowRole() 00000000002388f0 T QWidgetPrivate::checkWindowRole() libQtHelp.so.4.6.2 libQtMultimedia.so.4.6.2 U QObjectPrivate::checkWindowRole() libQtNetwork.so.4.6.2 U QObjectPrivate::checkWindowRole() libQtOpenGL.so.4.6.2 U QObjectPrivate::checkWindowRole() U QWidgetPrivate::checkWindowRole() libQtScript.so.4.6.2 U QObjectPrivate::checkWindowRole() libQtScriptTools.so.4.6.2 U QObjectPrivate::checkWindowRole() U QWidgetPrivate::checkWindowRole() libQtSql.so.4.6.2 U QObjectPrivate::checkWindowRole() libQtSvg.so.4.6.2 U QObjectPrivate::checkWindowRole() U QWidgetPrivate::checkWindowRole() libQtTest.so.4.6.2 libQtXmlPatterns.so.4.6.2 U QObjectPrivate::checkWindowRole() libQtXml.so.4.6.2 

Und es scheint, dass innerhalb von QWidgetPrivate::checkWindowRole()(wenn ich nmrichtig interpretiere ?) Erklärt wird libQtGui.so.4.6.2. Diese Bibliothek ist bereits verlinkt (siehe oben)

FRAGE: Wie kann ich dieses Problem beheben und libQtOpenGLdie richtigen Bibliotheken sehen?

0

1 Antwort auf die Frage

0
irritable_phd_syndrom

Es stellt sich heraus, dass ich eine Software habe, die ich lokal in meinem Benutzerbereich installiert habe und einige Bibliotheken darin installiert habe ~/local/lib. In diesem Verzeichnis wurde die Software installiert libQtCore.so.4und libQtGui.so.4. Dies waren die einzigen Qt-bezogenen Bibliotheken, die hier installiert wurden. Ebenso hatte ich eingestellt

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/path/to/user/local/lib 

Dies bedeutet, dass der Linker diese Bibliotheken vor denen gefunden hat, die sich in befinden /usr/lib64. Wenn Sie $ LD_LIBRARY_PATH so ändern, dass er nicht mehr darauf verweist ~/local/lib, lassen Sie den Linker seine Arbeit erledigen und mein Problem lösen.