在centos上安装mitsuba

因为实验室的Xeon phi服务器使用的centos 6.4,mitsuba(0.50)的官方帮助文档没有提到centos系统下的源代码编译方式。

因为fedro和centos同源,我们按照官方文档中fedro的教程来安装。下面我写出一些,我在安装过程遇见的困难以及解决问题,整个过程相当的考验你定位、搜索、解决问题的能力,你必须非常的敏锐。

首先,安装依赖项的时会遇见点麻烦:

官方文档中,使用下列命令来安装依赖包:

sudo yum install mercurial gcc-c++ scons boost-devel qt4-devel OpenEXR-devel xerces-c-devel python-devel glew-devel libpng-devel libjpeg-devel collada-dom-devel eigen3-devel fftw3-devel

其中,boost如果使用scons编译时,如果提示找不到boost-thread,boost-system一类的问题时:

你需要使用命令:

#rpm -e boost-devel

#rpm -e boost

来卸载boost和boost-devel,再到boost官网下载source code,安装separately-compiled Boost libraries(动态链接库,系统自带的可能只含有头文件)。boost官方的帮助文档很详细,一步一步的来,不会有问题。

注意:如果你安装的boost是1.58,不知道在boost的哪个版本改动了phoenix模块的位置。原来的boost安装好后,phoenix在/usr/local/include/boost/spirit/home/下。而我安装好boost1.58后,编译mitsuba时出现找不到 /boost/spirit/home/phoenix/bind/bind_member_variable.hpp 的错误。你需要:

#cp /usr/local/include/boost/phoenix /usr/local/include/boost/spirit/home -r

不出意外,在成功编译好mitsuba后,你已然会得到找不到libboost_xx.xxx.so的错误。这是因为我们的boost的库文件安装到了/usr/local/lib下面。

执行:

#cat /etc/ld.so.conf

你会得到这样的信息:

include ld.so.conf.d/*.conf

再执行

#echo "/usr/local/lib" >> /etc/ld.so.conf

#ldconfig


 

继续,你会发现有一些安装包找不到

glew-devel collada-dom-devel eigen3-devel

这三个安装包使用yum install找不到安装包。

eigen3-devel很简单,到http://eigen.tuxfamily.org/index.php?title=Main_Page下载,按照官方帮助文档一步一步的来就行。编译,复制文件到/usr/local/include/eigen3即可。


 

glew-devel需要注意,mitsuba用了glewmx,所以,在编译时一定要加入附加编译选项install.all!否则,scons必然会告诉你,找不到-lGLEWMX。

大概过程是这样的,首先下载并解压好glew1.12.0后,

进入glew1.12.0/

#make clean

#make all

#make install.all


 

最糟糕的是collada-dom-devel,编译和安装过程恶心至极。

首先,你得安装Cg3,这个可以下载到rpm的安装包,直接使用rpm安装即可。

因为mitsuba只用到了minizip和dom,你不需要编译它的domtest,所以:

#vim (path_to_cllada-dom/)dom/make/common.mk

修改

ccFlags= -Wall -DNO_BOOST -DNO_ZAE

保存,退出。

然后依次执行:

#cp Makefile.linux Makefile

#make os=linux project=minizip parser=libxml -C dom
#make os=linux project=dom parser=libxml -C dom

注意,你编译dom的时候,可能会遇见compile error:

src/modules/LIBXMLPlugin/daeLIBXMLPlugin.cpp:457:65: error: ‘zipOpen64’ was not declared in this scope
src/modules/LIBXMLPlugin/daeLIBXMLPlugin.cpp:484:232: error: ‘zipOpenNewFileInZip3_64’ was not declared in this scope

我在这个地址找到了一点提示,http://sourceforge.net/p/collada-dom/bugs/154/

回答问题的人给出关键提示:"minizip-1.1" has the missing symbols for newer-format ZIP files, while "minizip" does not

minizip-1.1中有misssing symbols,而minizip没有。

所以,

#vim dom/make/dom.mk

修改其中的

# minizip
includeOpts += -Iexternal-libs/minizip/include


includeOpts += -Iexternal-libs/minizip-1.1  (没有/include)

保存,退出。

再次执行

#make os=linux project=dom parser=libxml -C dom

执行

#make install

OK,所有的依赖项都编译完了

 使用scons 你就能看到:scons: done building targets.

全文完。good luck!

原文地址:https://www.cnblogs.com/wangpei0522/p/4539035.html