操作系统Ubuntu10.04,从软件中心安装了zlib, libxmu-dev, libxi-dev,boost1.40, boost-python-1.40, OpenEXR 以及 ilmbase, 但是最后用的还是源码编译的hdf5, boost1.44, 跟ilmbase系列的最新版本 自己编译的软件如下: hdf5-1.8.9 boost_1_44_0 ilmbase-1.0.3 openexr-1.7.1 pyilmbase-1.0.0 alembic_1.1.3 编译boost_1_44_0: 根据alembic/doc/Boost-howtobuild.txt: 步骤一: export CXXFLAGS="-fPIC"; export CFLAGS="-fPIC"; export LDFLAGS="-fPIC" 步骤二: cd boost_1_44_0; ./bootstrap.sh --with-libraries=program_options --with-libraries=thread --with-libraries=python --prefix="/usr/local"; sudo ./bjam install --layout=versioned link=static threading=multi cxxflags=-fPIC; cd /usr/local/include/boost-1_44; sudo chmod -R a+r .; 编译hdf5-1.8.9: 步骤一: export LDFLAGS="-fPIC"; export CFLAGS="-m64 -fPIC"; 步骤二: ./configure --prefix=/usr/local --with-pic --disable-shared --enable-production --disable-debug --enable-threadsafe --with-pthread=/usr/local/include,/usr/include,/usr/local/lib,/usr/lib make; sudo make install; 编译过程中会产生很多的warnings,但是不影响使用。 编译ilmbase: ./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" LDFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix="/usr/local" make; sudo make install; 编译openexr: ./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" LDFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix="/usr/local" make; sudo make install; 编译pyilmbase: sudo ./configure --prefix="/usr/local" --with-ilmbase-prefix="/usr/local" --with-boost-python-libname="boost_python-gcc44-mt-1_44" -with-boost-include-dir="/usr/local/include" --with-boost-lib-dir="/usr/local/lib" LD_LIBRARY_PATH="/usr/local/lib" make; sudo make install; 编译alembic & pyalembic: 步骤一: python ~/alembic/build/bootstrap/alembic_bootstrap.py --pyilmbase_include_dir=/usr/include/OpenEXR --pyilmbase_pyimath_module=/usr/lib/python2.6/site-packages/imathmodule.so --enable-pyalembic --shared --cxxflags="-fPIC" ~/abcInstall 选项依次选择: /usr/local/include/boost-1_44/boost/lexical_cast.hpp /usr/local/lib/libboost_thread-gcc44-mt-1_44.so.1.44.0 /usr/include/zlib.h /usr/lib/libz.a /usr/local/include/hdf5.h /usr/local/lib/libhdf5.a /usr/local/include/OpenEXR/ImathMath.h /usr/local/lib/libImath.a 编译结果: Executing CMake command: cmake -D BOOTSTRAP_MODE:INTERNAL=FALSE -D RUN_FROM_MK:STRING="TRUE" /JGHome/xiangquan/alembic -- CMAKE SYSTEM NAME = Linux -- The install dir is /usr/local/alembic-1.1.3 -- OpenGL Libraries: GLEW;/usr/lib/libglut.so;/usr/lib/libXmu.so;/usr/lib/libXi.so;/usr/lib/libGLU.so;/usr/lib/libGL.so;/usr/lib/libSM.so;/usr/lib/libICE.so;/usr/lib/libX11.so;/usr/lib/libXext.so -- Using BOOST_INCLUDEDIR: /usr/include/boost-1_44 -- Using BOOST_LIBRARYDIR: /usr/lib -- Using BOOST_ROOT: /usr/include/boost-1_42/boost -- Boost version: 1.44.0 -- Found the following Boost libraries: -- program_options -- python -- thread -- BOOST_VERSION: 0 -- FOUND INCORRECT BOOST VERSION: 1_44 -- BOOST FOUND: TRUE -- BOOST INCLUDE DIRS: /usr/include/boost-1_44 -- BOOST LIBRARIES: optimized;/usr/lib/libboost_program_options-gcc44-mt-1_44.a;debug;/usr/lib/libboost_program_options-gcc44-mt-d-1_44.a;optimized;/usr/lib/libboost_python-gcc44-mt-1_44.a;debug;/usr/lib/libboost_python-gcc44-mt-d-1_44.a;optimized;/usr/lib/libboost_thread-gcc44-mt-1_44.a;debug;/usr/lib/libboost_thread-gcc44-mt-d-1_44.a -- ALEMBIC_BOOST_FOUND: 1 ILMBASE_ROOT is undefined -- ILMBASE INCLUDE PATH: /usr/include/OpenEXR -- HALF LIB: /usr/lib/libHalf.a -- IEX LIB: /usr/lib/libIex.a -- ILMTHREAD LIB: /usr/lib/libIlmThread.a -- IMATH LIB: /usr/lib/libImath.a -- About to include AlembicPyIlmBase.cmake -- About to start finding PyIlmBase and PyImath -- PYILMBASE INCLUDE PATH: /usr/include/OpenEXR -- PYIMATH LIB: /usr/lib:/usr/liPyImath.lib -- PYIMATH MODULE: ALEMBIC_PYILMBASE_PYIMATH_MODULE-NOTFOUND -- Found Python 2.6: /usr/bin/python2.6 -- NOT SETTING HDF5_INCLUDE_DIR FROM ENVIRONMENT -- HDF5 INCLUDE PATH: /usr/local/hdf5-1.8.9/include -- HDF5 LIBRARIES: debug;/usr/local/hdf5-1.8.9/lib/libhdf5_hl.a;/usr/local/hdf5-1.8.9/lib/libhdf5.a;/usr/lib/libpthread.so;/usr/lib/libz.so;/usr/lib/librt.so;/usr/lib/libm.so;optimized;/usr/local/hdf5-1.8.9/lib/libhdf5_hl.a;/usr/local/hdf5-1.8.9/lib/libhdf5.a;/usr/lib/libpthread.so;/usr/lib/libz.so;/usr/lib/librt.so;/usr/lib/libm.so -- Found HDF5 Library! -- Skipping Prman plugins -- Skipping Arnold plugins -- Skipping Maya plugins -- About to include Python cmake files -- LIBPYTHON_FILE: libpython2.6.a -- ALEMBIC_PYTHON_ROOT: /usr/lib64/python2.6/config -- ALEMBIC_PYTHON_LIBRARY: /usr/lib64/python2.6/config/libpython2.6.a -- PYTHON_INCLUDE_DIR:/usr/include/python2.6 -- Found libboost_python: optimized;/usr/lib/libboost_python-gcc44-mt-1_44.a;debug;/usr/lib/libboost_python-gcc44-mt-d-1_44.a -- LIBPYTHON_FILE: libpython2.6.a -- ALEMBIC_PYTHON_ROOT: /usr/lib64/python2.6/config -- ALEMBIC_PYTHON_LIBRARY: /usr/lib64/python2.6/config/libpython2.6.a -- PYTHON_INCLUDE_DIR:/usr/include/python2.6 -- Found libboost_python: optimized;/usr/lib/libboost_python-gcc44-mt-1_44.a;debug;/usr/lib/libboost_python-gcc44-mt-d-1_44.a -- Including SimpleAbcViewer -- Found Sphinx: /usr/bin/sphinx-build -- Found imath module: /usr/lib/python2.6/site-packages/imathmodule.so -- LD_LIBRARY_PATH: /usr/lib -- Configuring done -- Generating done -- Build files have been written to: /JGHome/xiangquan/abcInstall -- CMAKE SYSTEM NAME = Linux -- The install dir is /usr/local/alembic-1.1.3 -- OpenGL Libraries: GLEW;/usr/lib/libglut.so;/usr/lib/libXmu.so;/usr/lib/libXi.so;/usr/lib/libGLU.so;/usr/lib/libGL.so;/usr/lib/libSM.so;/usr/lib/libICE.so;/usr/lib/libX11.so;/usr/lib/libXext.so -- Using BOOST_INCLUDEDIR: /usr/include/boost-1_44 -- Using BOOST_LIBRARYDIR: /usr/lib -- Using BOOST_ROOT: /usr/include/boost-1_42/boost -- BOOST_VERSION: 104400 -- BOOST FOUND: TRUE -- BOOST INCLUDE DIRS: /usr/include/boost-1_44 -- BOOST LIBRARIES: optimized;/usr/lib/libboost_program_options-gcc44-mt-1_44.a;debug;/usr/lib/libboost_program_options-gcc44-mt-d-1_44.a;optimized;/usr/lib/libboost_python-gcc44-mt-1_44.a;debug;/usr/lib/libboost_python-gcc44-mt-d-1_44.a;optimized;/usr/lib/libboost_thread-gcc44-mt-1_44.a;debug;/usr/lib/libboost_thread-gcc44-mt-d-1_44.a -- ALEMBIC_BOOST_FOUND: 1 ILMBASE_ROOT is undefined -- ILMBASE INCLUDE PATH: /usr/include/OpenEXR -- HALF LIB: /usr/lib/libHalf.a -- IEX LIB: /usr/lib/libIex.a -- ILMTHREAD LIB: /usr/lib/libIlmThread.a -- IMATH LIB: /usr/lib/libImath.a -- About to include AlembicPyIlmBase.cmake -- About to start finding PyIlmBase and PyImath -- PYILMBASE INCLUDE PATH: /usr/include/OpenEXR -- PYIMATH LIB: /usr/lib:/usr/liPyImath.lib -- PYIMATH MODULE: /usr/lib/python2.6/site-packages/imathmodule.so -- Found Python 2.6: /usr/bin/python2.6 -- NOT SETTING HDF5_INCLUDE_DIR FROM ENVIRONMENT -- HDF5 INCLUDE PATH: /usr/local/hdf5-1.8.9/include -- HDF5 LIBRARIES: debug;/usr/local/hdf5-1.8.9/lib/libhdf5_hl.a;/usr/local/hdf5-1.8.9/lib/libhdf5.a;/usr/lib/libpthread.so;/usr/lib/libz.so;/usr/lib/librt.so;/usr/lib/libm.so;optimized;/usr/local/hdf5-1.8.9/lib/libhdf5_hl.a;/usr/local/hdf5-1.8.9/lib/libhdf5.a;/usr/lib/libpthread.so;/usr/lib/libz.so;/usr/lib/librt.so;/usr/lib/libm.so -- Found HDF5 Library! -- Skipping Prman plugins -- Skipping Arnold plugins -- Skipping Maya plugins -- About to include Python cmake files -- LIBPYTHON_FILE: libpython2.6.a -- ALEMBIC_PYTHON_ROOT: /usr/lib64/python2.6/config -- ALEMBIC_PYTHON_LIBRARY: /usr/lib64/python2.6/config/libpython2.6.a -- PYTHON_INCLUDE_DIR:/usr/include/python2.6 -- Found libboost_python: optimized;/usr/lib/libboost_python-gcc44-mt-1_44.a;debug;/usr/lib/libboost_python-gcc44-mt-d-1_44.a -- LIBPYTHON_FILE: libpython2.6.a -- ALEMBIC_PYTHON_ROOT: /usr/lib64/python2.6/config -- ALEMBIC_PYTHON_LIBRARY: /usr/lib64/python2.6/config/libpython2.6.a -- PYTHON_INCLUDE_DIR:/usr/include/python2.6 -- Found libboost_python: optimized;/usr/lib/libboost_python-gcc44-mt-1_44.a;debug;/usr/lib/libboost_python-gcc44-mt-d-1_44.a -- Including SimpleAbcViewer -- Found Sphinx: /usr/bin/sphinx-build -- Found imath module: /usr/lib/python2.6/site-packages/imathmodule.so -- LD_LIBRARY_PATH: /usr/lib -- Configuring done -- Generating done -- Build files have been written to: /JGHome/xiangquan/abcInstall 步骤二: 进入~/abcInstall,在编译makefile之前,先做如下修改, 将调用/usr/lib64/python2.6/config/libpython2.6.a 改为 /usr/lib64/python2.6/config/libpython2.6.so : ~/abcInstall/python/PyAbcOpenGL/CMakeFiles/alembicglmodule.dir/link.txt 中的libpython2.6.a改为libpython2.6.so ~/abcInstall/python/PyAlembic/CMakeFiles/alembicmodule.dir/link.txt 中的libpython2.6.a改为libpython2.6.so 否则编译时会出现: .... /libpython2.6.a(abstract.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC ...../libpython2.6.a: could not read symbols: Bad value 这样的报错。 步骤三: 编译alembic: make; sudo make install; 编译pyalembic: cd python; make; sudo make install; 步骤四: alembic默认安装到了/usr/local/alembic-1.1.3 然后,进入/usr/local/alembic-1.1.3/lib,将alembicglmodule.so 和 alembicmodule.so 拷贝到/usr/lib/python2.6/dist-packages中; 将其他的lib*.so文件拷贝到/usr/lib中; 将/usr/lib/python2.6/site-packages中的iex*.so跟imath*.so文件拷贝到/usr/lib/python2.6/dist-packages中。 编译过程完成! ################################################ 在python中的使用: 终端中,进入python,尝试: import OpenEXR import Imath 若成功,说明python openexr安装成功; 尝试: import imath 我的会出现“段错误”然后退出python程序,因此网上说的先import imath, 再import alembic的调用方法不能实现; 最后,我查到另一种解释错误的原因,http:///blog/2013/02/23/building-pyalembic/ 根据以上网页的解释,解决方法如下: import DLFCN import sys sys.setdlopenflags(DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL) 在引用alembic或者imath之前,先执行以上三段,则这两个库均能正确调用了~! enjoy~! |
|