Mac下安装Python版CAMB

安装过程遇到的坑

camb的最新版已经支持Intel Fortran编译器进行编译。然而编译python版本camb的过程中会遇到不少问题。

1、编译选项冲突 查看Makefile发现,MacOS平台下camb共享库camblib.so的编译选项中SFFLAGS保持默认会出现编译错误。

1
2
3
# -fminshared 与 -fpic 选项冲突
# 修改为
SFFLAGS = -dynamiclib

2、动态库加载错误 修改Makefile之后,编译没有问题,但是在Pythonimport时会出现库未加载的错误。

1
2
3
4
OSError:
dlopen(/Users/xuwutao/.pyenv/versions/3.7.1/envs/science/lib/python3.7/site-packages/camb/camblib.so, 6): Library not loaded: @rpath/libiomp5.dylib
Referenced from : /Users/xuwutao/.pyenv/versions/3.7.1/envs/science/lib/python3.7/site-packages/camb/camblib.so
Reason: image not found

解决办法: 将libiomp5.dylib所在的目录加入@rpath中。

1
install_name_tool -add_rpath /Users/xuwutao/Program/intel/2018/compilers_and_libraries_2018.1.126/mac/compiler/lib /Users/xuwutao/.pyenv/versions/3.7.1/envs/science/lib/python3.7/site-packages/camb/camblib.so

疑问

原以为设置好DYLD_LIBRARY_PATH就没有问题,没想到还需要设置@rpath。估计和Mac下动态库的加载机制有关,详细情况以后有时间再研究吧。