配置Planck Likelihood Code时Waf pyembed构建失败求助
解决Planck Likelihood Code在MacOS下Python 2.7嵌入式解释器构建失败问题
从你的config.log信息来看,问题主要集中在三个方面:Python 2.7的python-config不支持--embed参数、编译标志未被正确处理,以及链接阶段找不到-lintl库。下面是针对性的解决步骤:
1. 绕过python-config的--embed参数检测
Python 2.7本身没有--embed这个参数(这是Python 3.x新增的),所以waf的配置脚本在调用python2.7-config --embed时必然失败。你可以通过手动指定嵌入式Python的编译和链接参数来绕过这个检测:
# 先获取Python 2.7的编译和链接参数 PY_CFLAGS=$(python2.7-config --cflags) PY_LIBS=$(python2.7-config --libs --ldflags) # 直接传递这些参数给waf的configure命令 ./waf configure CC=gcc python=/opt/local/bin/python \ cfitsio_lib=/opt/local/lib cfitsio_include=/opt/local/include \ --lapack_mkl=${MKLROOT} --install_all_deps \ PYEMBED_CFLAGS="$PY_CFLAGS" PYEMBED_LIBS="$PY_LIBS"
2. 过滤未处理的编译标志
你的日志提到-pipe、-Wall、-Wstrict-prototypes这些标志未被处理,可能会干扰waf的配置流程。可以先过滤掉这些标志再传递:
# 过滤不需要的编译标志 PY_CFLAGS=$(python2.7-config --cflags | sed 's/-pipe//g; s/-Wall//g; s/-Wstrict-prototypes//g') PY_LIBS=$(python2.7-config --libs --ldflags) # 执行configure ./waf configure CC=gcc python=/opt/local/bin/python \ cfitsio_lib=/opt/local/lib cfitsio_include=/opt/local/include \ --lapack_mkl=${MKLROOT} --install_all_deps \ PYEMBED_CFLAGS="$PY_CFLAGS" PYEMBED_LIBS="$PY_LIBS"
3. 解决ld: library not found for -lintl错误
这个问题是因为链接器找不到intl库,MacOS上的MacPorts Python 2.7通常依赖gettext包提供的intl库:
步骤1:安装gettext
先确保你已经安装了gettext:
sudo port install gettext
步骤2:指定intl库路径
如果安装后仍然报错,手动在链接参数中指定intl库的路径:
PY_LIBS=$(python2.7-config --libs --ldflags | sed 's/-lintl/-L\/opt\/local\/lib -lintl/g') PY_CFLAGS=$(python2.7-config --cflags | sed 's/-pipe//g; s/-Wall//g; s/-Wstrict-prototypes//g') ./waf configure CC=gcc python=/opt/local/bin/python \ cfitsio_lib=/opt/local/lib cfitsio_include=/opt/local/include \ --lapack_mkl=${MKLROOT} --install_all_deps \ PYEMBED_CFLAGS="$PY_CFLAGS" PYEMBED_LIBS="$PY_LIBS"
备选方案:移除-lintl标志
如果你的Python 2.7实际上并不依赖intl库(部分MacOS Python发行版可能不需要),可以直接移除这个链接标志:
PY_LIBS=$(python2.7-config --libs --ldflags | sed 's/-lintl//g') PY_CFLAGS=$(python2.7-config --cflags | sed 's/-pipe//g; s/-Wall//g; s/-Wstrict-prototypes//g') ./waf configure CC=gcc python=/opt/local/bin/python \ cfitsio_lib=/opt/local/lib cfitsio_include=/opt/local/include \ --lapack_mkl=${MKLROOT} --install_all_deps \ PYEMBED_CFLAGS="$PY_CFLAGS" PYEMBED_LIBS="$PY_LIBS"
额外注意事项
- 确保你使用的
gcc是真正的GCC编译器,而非MacOS默认的Clang别名。如果需要,可以通过port install gcc安装GCC,并使用gcc-mp-XX(比如gcc-mp-7)作为CC参数。 - Python 2.7已经停止官方维护,后续可能还会遇到其他兼容性问题,如果项目允许,建议尝试升级到Python 3.x版本。
内容的提问来源于stack exchange,提问作者lilolalorphism
相关产品推荐
相关产品推荐

