分享

ubuntu安装alembic和pyalembic的过程以及调用方法

 Tech-d 2013-02-28
操作系统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~!
















    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多