Fedora 27 VTK 7.1.1,Qt 5

时间:2018-02-19 10:09:25

标签: qt linker-errors fedora vtk

我有一个使用VTK和Qt 5的应用程序。在运行时,我得到以下backtrace

#0  0x00007fffec00a66b in raise () at /lib64/libc.so.6
#1  0x00007fffec00c381 in abort () at /lib64/libc.so.6
#2  0x00007fffec054a57 in __libc_message () at /lib64/libc.so.6
#3  0x00007fffec05b9aa in  () at /lib64/libc.so.6
#4  0x00007fffec06490a in realloc () at /lib64/libc.so.6
#5  0x00007fffed5c6661 in QListData::realloc_grow(int) () at /lib64/libQt5Core.so.5
#6  0x00007fffed5c66ff in QListData::append(int) () at /lib64/libQt5Core.so.5
#7  0x00007fffed6856c0 in QList<QResourceRoot*>::append(QResourceRoot* const&) () at /lib64/libQt5Core.so.5
#8  0x00007fffed6814cd in qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*) () at /lib64/libQt5Core.so.5
#9  0x00007fffed558563 in _GLOBAL__sub_I_qrc_mimetypes.cpp () at /lib64/libQt5Core.so.5
#10 0x00007ffff7de5c13 in _dl_init () at /lib64/ld-linux-x86-64.so.2
#11 0x00007ffff7dd5f0a in _dl_start_user () at /lib64/ld-linux-x86-64.so.2
#12 0x0000000000000001 in  ()
#13 0x00007fffffffdf5f in  ()
#14 0x0000000000000000 in  ()

看起来QT 4和5之间存在一些不匹配导致库初始化错误。所以我检查了lddtree输出

simulator-ui => ./simulator-ui (interpreter => /lib64/ld-linux-x86-64.so.2)
    libvtkGUISupportQt.so.1 => /usr/lib64/vtk/libvtkGUISupportQt.so.1
    libvtkInteractionStyle.so.1 => /usr/lib64/vtk/libvtkInteractionStyle.so.1
    libvtkRenderingOpenGL2.so.1 => /usr/lib64/vtk/libvtkRenderingOpenGL2.so.1
        libOSMesa.so.8 => /lib64/libOSMesa.so.8
            libglapi.so.0 => /lib64/libglapi.so.0
            libselinux.so.1 => /lib64/libselinux.so.1
                libpcre2-8.so.0 => /lib64/libpcre2-8.so.0
                ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
            libLLVM-5.0.so => /lib64/libLLVM-5.0.so
                libffi.so.6 => /lib64/../lib64/libffi.so.6
                libedit.so.0 => /lib64/../lib64/libedit.so.0
                    libncurses.so.6 => /lib64/libncurses.so.6
                libtinfo.so.6 => /lib64/../lib64/libtinfo.so.6
        libGLU.so.1 => /lib64/libGLU.so.1
        libGL.so.1 => /lib64/libGL.so.1
            libGLX.so.0 => /lib64/libGLX.so.0
            libGLdispatch.so.0 => /lib64/libGLdispatch.so.0
    libz.so.1 => /lib64/libz.so.1
    libjpeg.so.62 => /lib64/libjpeg.so.62
    libpng16.so.16 => /lib64/libpng16.so.16
    libtiff.so.5 => /lib64/libtiff.so.5
        libjbig.so.2.1 => /lib64/libjbig.so.2.1
    libvtkglew.so.1 => /usr/lib64/vtk/libvtkglew.so.1
    libvtkIOImport.so.1 => /usr/lib64/vtk/libvtkIOImport.so.1
    libQt5Svg.so.5 => /lib64/libQt5Svg.so.5
    libQt5Charts.so.5 => /lib64/libQt5Charts.so.5
    libmathematica++.so => /home/sensiaas/projects/senschedule/build/mathematica++/libmathematica++.so
    libboost_filesystem.so.1.64.0 => /lib64/libboost_filesystem.so.1.64.0
    libboost_system.so.1.64.0 => /lib64/libboost_system.so.1.64.0
    libboost_serialization.so.1.64.0 => /lib64/libboost_serialization.so.1.64.0
    libvtkFiltersExtraction.so.1 => /usr/lib64/vtk/libvtkFiltersExtraction.so.1
    libvtkFiltersStatistics.so.1 => /usr/lib64/vtk/libvtkFiltersStatistics.so.1
    libvtkImagingFourier.so.1 => /usr/lib64/vtk/libvtkImagingFourier.so.1
    libvtkalglib.so.1 => /usr/lib64/vtk/libvtkalglib.so.1
    libvtkImagingCore.so.1 => /usr/lib64/vtk/libvtkImagingCore.so.1
    libSM.so.6 => /lib64/libSM.so.6
    libICE.so.6 => /lib64/libICE.so.6
    libX11.so.6 => /lib64/libX11.so.6
        libxcb.so.1 => /lib64/libxcb.so.1
            libXau.so.6 => /lib64/libXau.so.6
    libXext.so.6 => /lib64/libXext.so.6
    libXt.so.6 => /lib64/libXt.so.6
  * libQtGui.so.4 => /lib64/libQtGui.so.4
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0
            libpcre.so.1 => /lib64/libpcre.so.1
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0
        libfreetype.so.6 => /lib64/libfreetype.so.6
            libbz2.so.1 => /lib64/libbz2.so.1
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0
        libXi.so.6 => /lib64/libXi.so.6
        libXrender.so.1 => /lib64/libXrender.so.1
        libXrandr.so.2 => /lib64/libXrandr.so.2
        libXfixes.so.3 => /lib64/libXfixes.so.3
        libXcursor.so.1 => /lib64/libXcursor.so.1
        libXinerama.so.1 => /lib64/libXinerama.so.1
        libfontconfig.so.1 => /lib64/libfontconfig.so.1
            libexpat.so.1 => /lib64/libexpat.so.1
  * libQtNetwork.so.4 => /lib64/libQtNetwork.so.4
        libssl.so.10 => /lib64/libssl.so.10
        libcrypto.so.10 => /lib64/libcrypto.so.10
  * libQtCore.so.4 => /lib64/libQtCore.so.4
    libvtkRenderingCore.so.1 => /usr/lib64/vtk/libvtkRenderingCore.so.1
    libvtkFiltersSources.so.1 => /usr/lib64/vtk/libvtkFiltersSources.so.1
    libvtkFiltersGeneral.so.1 => /usr/lib64/vtk/libvtkFiltersGeneral.so.1
    libvtkCommonComputationalGeometry.so.1 => /usr/lib64/vtk/libvtkCommonComputationalGeometry.so.1
    libvtkCommonColor.so.1 => /usr/lib64/vtk/libvtkCommonColor.so.1
    libvtkFiltersGeometry.so.1 => /usr/lib64/vtk/libvtkFiltersGeometry.so.1
    libvtkFiltersCore.so.1 => /usr/lib64/vtk/libvtkFiltersCore.so.1
    libvtkIOImage.so.1 => /usr/lib64/vtk/libvtkIOImage.so.1
    libvtkCommonExecutionModel.so.1 => /usr/lib64/vtk/libvtkCommonExecutionModel.so.1
    libvtkCommonDataModel.so.1 => /usr/lib64/vtk/libvtkCommonDataModel.so.1
    libvtkCommonTransforms.so.1 => /usr/lib64/vtk/libvtkCommonTransforms.so.1
    libvtkCommonMisc.so.1 => /usr/lib64/vtk/libvtkCommonMisc.so.1
    libvtkCommonMath.so.1 => /usr/lib64/vtk/libvtkCommonMath.so.1
    libvtkCommonSystem.so.1 => /usr/lib64/vtk/libvtkCommonSystem.so.1
    libvtkCommonCore.so.1 => /usr/lib64/vtk/libvtkCommonCore.so.1
    libvtksys.so.1 => /usr/lib64/vtk/libvtksys.so.1
    libvtkDICOMParser.so.1 => /usr/lib64/vtk/libvtkDICOMParser.so.1
    libvtkmetaio.so.1 => /usr/lib64/vtk/libvtkmetaio.so.1
    libQt5Widgets.so.5 => /lib64/libQt5Widgets.so.5
    libQt5Gui.so.5 => /lib64/libQt5Gui.so.5
        libharfbuzz.so.0 => /lib64/libharfbuzz.so.0
            libgraphite2.so.3 => /lib64/libgraphite2.so.3
    libQt5Core.so.5 => /lib64/libQt5Core.so.5
        libsystemd.so.0 => /lib64/libsystemd.so.0
            libgcrypt.so.20 => /lib64/libgcrypt.so.20
                libgpg-error.so.0 => /lib64/libgpg-error.so.0
            liblzma.so.5 => /lib64/liblzma.so.5
            liblz4.so.1 => /lib64/liblz4.so.1
        libicui18n.so.57 => /lib64/libicui18n.so.57
        libicuuc.so.57 => /lib64/libicuuc.so.57
        libicudata.so.57 => /lib64/libicudata.so.57
        libpcre2-16.so.0 => /lib64/libpcre2-16.so.0
    libstdc++.so.6 => /lib64/libstdc++.so.6
    libpthread.so.0 => /lib64/libpthread.so.0
    librt.so.1 => /lib64/librt.so.1
    libdl.so.2 => /lib64/libdl.so.2
    libuuid.so.1 => /lib64/libuuid.so.1
    libm.so.6 => /lib64/libm.so.6
    libgcc_s.so.1 => /lib64/libgcc_s.so.1
    libc.so.6 => /lib64/libc.so.6

它显示Qt4依赖项以及Qt5依赖项。然后我检查了Qt的{​​{1}}依赖项。这表明它仅取决于libvtkGUISupportQt.so

Qt4

在vtk mailing list他们说将变量$ ldd /usr/lib64/vtk/libvtkGUISupportQt.so.1 | grep -i qt libQtGui.so.4 => /lib64/libQtGui.so.4 (0x00007f153b7bd000) libQtNetwork.so.4 => /lib64/libQtNetwork.so.4 (0x00007f153b46f000) libQtCore.so.4 => /lib64/libQtCore.so.4 (0x00007f153af6b000) 设置为VTK_QT_VERSION应该有效。但我怀疑,因为"5"依赖于libvtkGUISupportQt.so编译。但是我在Qt4中设置了该变量。正如所料,它没有用。

CMakeLists.txt

那么现在解决方案是什么?我曾经听过VTK 7链接到Qt5。那是错的吗?然而,在我的Mac中它甚至在3个月之前也能正常工作。现在,我的Mac使用set(VTK_QT_VERSION "5" CACHE STRING "Expected Qt version") mark_as_advanced(VTK_QT_VERSION) FIND_PACKAGE(VTK 7.0 REQUIRED COMPONENTS vtkGUISupportQt vtkIOImport) message(STATUS ${VTK_MODULES_DIR}) INCLUDE(${VTK_USE_FILE}) # Find the QtWidgets library FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Svg Charts REQUIRED) Vtk 8(默认值)。几个月前可能是Qt5 Vtk 7。我不知道,因为我最近做了一些更新。

我更喜欢用Qt5进行安装,以便我可以轻松发货。 dnfVtk都安装了Qt(在Fedora中)和dnf(在Mac中)但是如果我现在从源代码编译和安装Vtk8会发生冲突吗?

另一个棘手的解决方案可能是绕过brew并创建一个与QVTKWidget完成相同工作的QWidget。如果这很容易。我不知道那是多么可行。

相关Bug报告

使用Qt5构建QVTKWidget时,可能存在其他依赖项的问题(我不知道,可能是python 3)。但到目前为止Vtk可以用Qt5编译。所以我认为二进制发行版中可以包含libvtkGUISupportQtlibvtkGUISupportQt4。第一个可以用于尚未处理的依赖包。

0 个答案:

没有答案