我在Centos.EL7上编译meshlab-2016.12遇到麻烦。
我有一些办法。
将QT更新为Qt-5.9.1,作为Centos的最新版本是Qt版本5.6.1-我之前已安装

sudo yum install qt5-qtbase
sudo yum install qt5-qtx11extras
sudo yum install qt5-qtbase-devel

但是Meshlab至少需要Qt5.7

然后设置这些环境。变数
setenv QTDIR /usr/local/Qt-5.9.1
setenv QTINC /usr/local/Qt-5.9.1/include
setenv QTLIB /usr/local/Qt-5.9.1/lib
setenv PATH /usr/local/Qt-5.9.1/bin:$PATH
setenv PATH /usr/local/bin:/usr/local/Qt-5.9.1/bin:$PATH

然后在测试机上按照说明进行操作,安装到/opt/TESTING中
  • 将vcglib安装到/opt/TESTING
  • 将meshlab-2016.12下载到/opt/TESTING并解压缩在那里
  • 跑以下

    qmake -project

  • (这会选择正确的QT版本)
    qmake src/external/external.pro
    

    (制作外部库-包括jhead-2.95
    gmake
    gmake install
    

    (制作外部库-包括jhead-2.95)
    qmake src/meshlab_mini.pro
    

    (要用最少的插件集构建Meshlab)

    这是失败的地方,如下所示;
    ../../vcglib/vcg/complex/algorithms/clean.h:1789:0:
    warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
    
    pragma omp parallel for schedule(dynamic, 10)
    
    g++ -Wl,-O1 -Wl,-z,origin -Wl,-rpath,\$ORIGIN/../distrib -Wl,-rpath,
    /usr/local/Qt-5.9.1/lib -o ../distrib/meshlab main.o mainwindow_Init.o
    mainwindow_RunTime.o glarea.o multiViewer_Container.o plugindialog.o
    customDialog.o filterScriptDialog.o saveSnapshotDialog.o layerDialog.o
    savemaskexporter.o changetexturename.o stdpardialog.o ml_std_par_dialog.o
    xmlstdpardialog.o additionalgui.o xmlgeneratorgui.o ml_render_gui.o
    ml_rendering_actions.o ml_default_decorators.o ml_selection_buffers.o
    trackball.o trackmode.o coordinateframe.o glarea_setting.o filterthread.o
    qrc_meshlab.o moc_interfaces.o moc_mainwindow.o moc_glarea.o
    moc_multiViewer_Container.o moc_plugindialog.o moc_customDialog.o
    moc_filterScriptDialog.o moc_saveSnapshotDialog.o moc_savemaskexporter.o
    moc_changetexturename.o moc_layerDialog.o moc_stdpardialog.o
    moc_ml_std_par_dialog.o moc_xmlstdpardialog.o moc_additionalgui.o
    moc_xmlgeneratorgui.o moc_ml_render_gui.o moc_ml_rendering_actions.o
    moc_filterthread.o   -L../external/lib/linux-g++ -ljhead -L../distrib
    -lcommon -lGLU -L/usr/local/Qt-5.9.1/lib -lQt5OpenGL -lQt5Widgets -lQt5Gui
    -lQt5Xml -lQt5XmlPatterns -lQt5Network -lQt5Script -lQt5Core -lGL -lpthread
    /bin/ld: cannot find -ljhead
    collect2: error: ld returned 1 exit status
    gmake[1]: *** [../distrib/meshlab] Error 1
    gmake[1]: Leaving directory `/opt/TESTING/meshlab-2016.12/meshlab'
    gmake: *** [sub-meshlab-make_first-ordered] Error 2
    

    所以说ld找不到ljhead。编译的其他部分似乎确实可以找到它,例如
    -I../src/external/glew-1.7.0/include -I../src/external/jhead-2.95
    

    看着ld
    /bin/ld -V
    GNU ld version 2.25.1-22.base.el7
      Supported emulations:
       elf_x86_64
       elf32_x86_64
       elf_i386
       i386linux
       elf_l1om
       elf_k1om
    


    /
    usr/bin/ld -V
    GNU ld version 2.25.1-22.base.el7
      Supported emulations:
       elf_x86_64
       elf32_x86_64
       elf_i386
       i386linux
       elf_l1om
       elf_k1om
    

    此时任何建议都将是有用的。希望我只是错过了一些东西

    更新:
    尝试了以下William Brown的解决方法,该方法取得了一些进展。稍后失败
    gmake[1]: Leaving directory `/opt/src/meshlab/meshlabplugins/filter_layer'
    cd meshlabplugins/filter_measure/ && ( test -e Makefile || /opt/bin/Qt5.7.1/5.7/gcc_64/bin/qmake
    /opt/src/meshlab/src/meshlabplugins/filter_measure/filter_measure.pro -o Makefile ) && gmake -f Makefile
    gmake[1]: Entering directory `/opt/src/meshlab/meshlabplugins/filter_measure'
    gmake[1]: *** No rule to make target `filter_measure.xml', needed by `../../distrib/plugins/libfilter_measure.so'.  Stop.
    gmake[1]: Leaving directory `/opt/src/meshlab/meshlabplugins/filter_measure'
    gmake: *** [sub-meshlabplugins-filter_measure-make_first-ordered] Error 2
    

    最佳答案

    我已经在Centos 7(7.3.1611)上解决了这个问题。

    似乎有2个问题,我并不是说这是正确的解决方法,而只是解决方法。

    解压缩tar文件后,将cd放到顶层(我解压缩到/local/meshlab)。然后,我创建一个链接:

    # ln -s ./src/external eternal
    

    原因是失败的语句中的-L似乎指向该顶层的外部文件夹,而不是./src

    完成后,我可以毫无问题地构建external.pro,并且输出.a文件都放入/local/meshlab/lib/linux-g++。没有链接,它们就位于一个临时的构建文件夹中。

    但是-L不在那儿,它看起来在/local/meshlab/src/external/lib/linux-g++/中,那里已经有一些预装的.a文件。所以我将.a文件复制到那里:
    # cp /local/meshlab/lib/linux-g++/*.a /local/meshlab/src/external/lib/linux-g++/
    

    现在,当我使用时:
    # qmake src/meshlab_mini.pro
    # gmake
    

    它可以工作并在/local/meshlab/distrib中构建可运行的Meshlab二进制文件。

    10-07 22:16