2017-08-11 105 views
0

我在编译centos.EL7上的meshlab-2016.12时遇到问题。
我得到了一些方法。
更新QT到QT-5.9.1作为最新的CentOS是Qt的版本5.6.1 - 这是我以前安装在Centos EL7上编译meshlab

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

但是至少需要Qt5.7的meshlab

然后设置这些ENV。变量

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 /测试

  1. 安装vcglib到/ opt /测试

  2. 下载meshlab-2016.12到/ opt /测试并在那里解开它

  3. 然后

    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 

任何意见将是在这一点上是有用的。希望我错过了一些东西

更新: 试图从下面的威廉布朗解决方法,这取得了一些进展。在以后失败

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 

回答

0

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

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

将tar文件I 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二进制文件。

+0

感谢威廉。这摆脱了我报道的错误。不幸的是,它产生了另一个(我试图构建meshlab_full.pro 'gmake [1]:***没有规则来制作目标'filter_measure.xml','../../distrib/plugins需要' /libfilter_measure.so'Stop.' 虽然进展! –