.so文件中的Boost.Python |符号,但我得到ImportError:未定义的符号 我使用Boosi.python在我的Python应用程序中嵌入C++代码。模块构建良好,但有一些警告。在Python中导入模块时,出现以下错误: ImportError: .../cdtm_ext.so: undefined symbol: gsl_multimin_fdfminimizer_conjugate_fr

.so文件中的Boost.Python |符号,但我得到ImportError:未定义的符号 我使用Boosi.python在我的Python应用程序中嵌入C++代码。模块构建良好,但有一些警告。在Python中导入模块时,出现以下错误: ImportError: .../cdtm_ext.so: undefined symbol: gsl_multimin_fdfminimizer_conjugate_fr,python,boost,boost-python,bjam,python-import,Python,Boost,Boost Python,Bjam,Python Import,此符号在外部库(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 co

此符号在外部库(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>. 
  ;
导入python;
如果![python.configured]
{
ECHO“注意:在user config.jam中没有配置Python”;
ECHO“注意:将使用默认配置”;
使用python;
}
使用projectboost
: ../../../.. ;
项目
:要求
/boost/python//boost\u python
/usr/local/include/gsl
;
python扩展cdtm_ext:cdtm.boost.cpp cdtm/cdtm-model.cpp cdtm/corpus.cpp cdtm/main.cpp cdtm/opt.cpp cdtm/utils.cpp:/usr/local/include/gsl;
安装方便的拷贝
:cdtm_ext
:在共享的\u库PYTHON\u扩展上
. 
;

当我用低级C++接口编写自己的扩展时,我也遇到了类似的问题。我通过在
扩展
函数调用的库列表中添加库名
gsl
解决了这个问题<代码>模块=扩展(…库=['gsl','cblas']]…)。我不知道如何使用Boost.Python做同样的事情。

符号
gsl\U multimin\U fdfminimizer\U conjugate\U fr
cdtm\U ext中没有定义。因此,
cdtm\U ext中引用了它。因此
但没有定义,这就是
U
的意思。您需要链接到案例中的库
gsl
,以定义该符号

有关如何将库与bjam链接的信息,请参阅