首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost python版本中的共享库不包含任何函数

Boost python版本中的共享库不包含任何函数
EN

Stack Overflow用户
提问于 2014-06-07 11:33:34
回答 2查看 664关注 0票数 1

我在从我的Boost Python项目构建共享库时遇到了问题。由于某些原因,最终的共享库几乎是空的,并且不包含我包装的任何函数。我已经成功地在我的机器上运行了"Hello World“示例,所以我非常确定我已经正确地安装和配置了Boost。

以下是模块定义(在FM.h头文件中):

代码语言:javascript
复制
/* Python Wrapper using Boost.python */
#include <boost/python.hpp>
using namespace boost::python;

BOOST_PYTHON_MODULE(fm_index)
{
    class_<FM>("FM", init<>())
            .def(init<uint8_t* , uint32_t, uint32_t>())
            .def("save", &FM::save)
            .def("count", &FM::count)
            .def("locate", &FM::locate)
            .def("extract", &FM::extract)
            .def("load", &FM::load, return_value_policy<manage_new_object>())
            .staticmethod("load")
    ;
}

下面是我的MakeFile中的构建定义:

代码语言:javascript
复制
CCP=g++
CFLAGS=-W -Wall -O3 -fPIC

INCCDS=./libcds/includes/
INCDIVSUF=./libdivsufsort/include/

BOOST_INC=/home/adevabhaktuni/boost_1_52_0/
BOOST_LIB=/home/adevabhaktuni/boost_1_52_0/stage/lib/

PYTHON_VERSION=2.6
PYTHON_INCLUDE=/usr/include/python$(PYTHON_VERSION)

FM.o: FM.cpp FM.h
    $(CCP) -I $(INCCDS) -I $(INCDIVSUF) -I $(BOOST_INC) -I $(PYTHON_INCLUDE) -c $(CFLAGS) FM.cpp -o FM.o

fm_index.so: FM.o ./libcds/lib/libcds.a ./libdivsufsort/lib/libdivsufsort.a
    $(CCP) -shared -W1,soname,fm_index.so -L $(BOOST_LIB) -lboost_python -lpython$(PYTHON_VERSION) FM.o ./libcds/lib/libcds.a ./libdivsufsort/lib/libdivsufsort.a -o fm_index.so

目标文件FM.o大约是206 kB,当我在它上面运行nm -u时,我看到了我期望看到的所有函数。然而,共享库fm_index.so的大小只有5 kB,而且几乎完全是空的!

代码语言:javascript
复制
nm -u fm_index.so

fm_index.so:
0000000000200540 a _DYNAMIC
0000000000200728 a _GLOBAL_OFFSET_TABLE_
             w _Jv_RegisterClasses
0000000000200518 d __CTOR_END__
0000000000200510 d __CTOR_LIST__
0000000000200528 d __DTOR_END__
0000000000200520 d __DTOR_LIST__
0000000000000508 r __FRAME_END__
0000000000200530 d __JCR_END__
0000000000200530 d __JCR_LIST__
0000000000200748 A __bss_start
             w __cxa_finalize@@GLIBC_2.2.5
00000000000004c0 t __do_global_ctors_aux
0000000000000410 t __do_global_dtors_aux
0000000000200538 d __dso_handle
             w __gmon_start__
0000000000200748 A _edata
0000000000200758 A _end
00000000000004f8 T _fini
00000000000003b8 T _init
00000000000003f0 t call_gmon_start
0000000000200750 b completed.6145
0000000000200748 b dtor_idx.6147
0000000000000490 t frame_dummy

当我尝试在Python中导入fm_index模块时,我得到以下错误:

代码语言:javascript
复制
ImportError: dynamic module does not define init function (initfm_index)

有人知道这是怎么回事吗?我没有使用bjam,因为我不知道如何包含fm_index模块所依赖的libcds.a和libdivsufsort.a库。然而,我在"Hello World“项目中使用了与上面类似的MakeFile,它似乎工作得很好。任何建议都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2014-06-11 17:57:12

您从来没有定义过要用Boost.Python包装的函数吗?

也许您应该看看Boost.Python文档中的第一个hello world示例:

Exposing Classes

票数 0
EN

Stack Overflow用户

发布于 2014-06-11 21:00:03

链接器命令行看起来不正确,因为它以错误的顺序列出了对象和库。尝试将其更改为:

代码语言:javascript
复制
$(CCP) -shared -o $@ -W1,soname,${@F} -L$(BOOST_LIB) FM.o ./libcds/lib/libcds.a ./libdivsufsort/lib/libdivsufsort.a -lboost_python -lpython$(PYTHON_VERSION) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24093380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档