我正在使用 Boost.Python 在我的 Python 应用程序中嵌入 C++ 代码。该模块构建良好,并带有一些警告。当我在 Python 中导入模块时,出现此错误:
ImportError: .../cdtm_ext.so: undefined symbol: gsl_multimin_fdfminimizer_conjugate_fr
该符号定义在外部库(Gnu Scientific Library)头文件中,该符号存在于 .so 文件中:
$ nm cdtm_ext.so | grep gsl_multimin_fdfminimizer_conjugate_fr
U gsl_multimin_fdfminimizer_conjugate_fr
这是我的Jamroot
文件:
import python ;
if ! [ python.configured ]
{
ECHO "notice: no Python configured in user-config.jam" ;
ECHO "notice: will use default configuration" ;
using python ;
}
use-project boost
: ../../../.. ;
project
: requirements
<library>/boost/python//boost_python
<include>/usr/local/include/gsl
;
python-extension cdtm_ext : cdtm.boost.cpp cdtm/cdtm-model.cpp cdtm/corpus.cpp cdtm/main.cpp cdtm/opt.cpp cdtm/utils.cpp : <library-path>/usr/local/include/gsl ;
install convenient_copy
: cdtm_ext
: <install-dependencies>on <install-type>SHARED_LIB <install-type>PYTHON_EXTENSION
<location>.
;
当我使用低级 C++ 接口编写自己的扩展时,我遇到了类似的问题。我通过在函数调用 gsl
的库列表中添加库名称来解决问题。. 我不知道如何用 Boost.Python 做同样的事情。Extension
module = Extension(... libraries = ['gsl', 'cblas'] ...)