Python中文
首页
教程
问答
标签
搜索
登录
注册
C++ Boost .Python:2个问题
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<> >,我搜索了一个很好的工具来集成我的C++代码和Python,首先我看了BooSt.python。</p> <p>我从boost文档中获得了hello examle并尝试构建和运行它。源代码是(src/hello.cpp):</p> <pre><code>#include <Python.h> #include <boost/python.hpp> char const* greet() { return "hello, world"; } BOOST_PYTHON_MODULE(hello_ext) { using namespace boost::python; def("greet", greet); } </code></pre> <p><strong>问题1-Windows和mingw</p> <p>我试图建立和我的结果:</p> <pre><code>g++ -o build\hello.o -c -IE:\Programming\libs\boost_1_48_0 -IE:\Programming\Python\include src\hello.cpp g++ -shared -o pyhello.dll build\hello.o -LE:\Programming\libs\boost_1_48_0\stage\lib -LE:\Programming\Python\libs -lboost_python-mgw45-mt-1_48 -lpython27 -Wl,--out-implib,libpyhello.a Creating library file: libpyhello.a build\hello.o:hello.cpp:(.text+0x20): undefined reference to `_imp___ZN5boost6python6detail11init_moduleEPKcPFvvE' </code></pre> <p>还有与boost::python类似的4个未定义错误。</p> <p>我的build boost命令行:<code>bjam toolset=gcc variant=release</code></p> <p>我在google(和stackoverflow)也发现了类似的问题,但在我的案例中没有找到答案。</p> <p><strong>问题2-使用模块(linux)</strong></p> <p>在linux平台上,构建模块没有问题,同一个源代码编译得很好:</p> <pre><code>g++ -o build/hello.os -c -fPIC -I/usr/include/python2.7 src/hello.cpp g++ -o libpyhello.so -shared build/hello.os -lboost_python -lpython2.7 </code></pre> <p>现在,我该怎么用呢?在文档中,没有关于模块命名的文字,请引用:</p> <blockquote> <p>can be exposed to Python by writing a Boost.Python wrapper:</p> <pre><code>#include <boost/python.hpp> BOOST_PYTHON_MODULE(hello_ext) { using namespace boost::python; def("greet", greet); } </code></pre> <p>That's it. We're done. We can now build this as a shared library. The resulting DLL is now visible to Python. Here's a sample Python session:</p> <pre><code>>>> import hello_ext >>> print hello_ext.greet() hello, world </code></pre> </blockquote> <p>所以,我的模块名为:libpyhello.So,但是如何在pythoniterpeter中使用它呢?我尝试导入pyhello,hello_ext,libpyhello-只有使用libpyhello解释器才能打印:</p> <pre><code>ImportError: dynamic module does not define init function (initlibpyhello) </code></pre> <p>导入的所有其他变体都失败,原因是:<code>ImportError: No module named pyhello</code></p> <p><strong>更新第二个问题:已解决,*.so模块必须命名为BOOST_PYTHON_模块中使用的ID。在我将<code>BOOST_PYTHON_MODULE(hello_ext)</code>更改为<code>BOOST_PYTHON_MODULE(libpyhello)</code>之后,模块将与libpyhello一起导入。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>库文件的命名方式必须与在此处声明模块的方式相同,这一点很重要:</p> <pre><code>BOOST_PYTHON_MODULE(hello_ext) </code></pre> <p>即<code>hello_ext.dll</code>或<code>hello_ext.so</code>。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
创建一个python程序,从websi中提取文件
9 回答
创建一个python程序,告诉我名字和出生年份的人的年龄
2 回答
创建一个Python程序,它接受一个简短的描述并从给定的集合返回一个解决方案(使用nlp)
6 回答
创建一个python程序,用户在其中输入一个月,它会告诉您y的下一个月
1 回答
创建一个python程序,要求用户输入一个偶数奇数
4 回答
创建一个Python程序来修改名称以digi结尾的目录的文本文件
6 回答
创建一个python程序来猜测用户的“秘密号码”?
5 回答
创建一个python算法来训练keras模型来预测一个大的整数序列
4 回答
创建一个python类,它被视为一个列表,但是有更多的特性?
10 回答
创建一个Python类,我可以将其序列化为一个嵌套的JSON obj
3 回答
创建一个python类来查找直线的斜率和长度
3 回答
创建一个Python网络爬虫来获取谷歌Play商店应用程序的元数据
6 回答
创建一个Python网页
10 回答
创建一个python脚本,不断从excel文件中读取数据并进行计算
2 回答
创建一个python脚本,使用tcpdump计算到达网站的数据包数量?
6 回答
创建一个Python脚本,可以运行其他SAS程序并更新Excel工作簿。
1 回答
创建一个python脚本,它将读取csv文件,并使用该输入从web抓取数据finviz.com网站然后将数据导出到csv fi中
8 回答
创建一个python脚本,用mysql数据库中的结构和数据文件创建一个sql转储
2 回答
创建一个python脚本,该脚本将对某个键进行文本文件搜索,并将编号复制到新文件中
7 回答
创建一个Python脚本,该脚本连接到特定端口(SMTP)上的一系列IP
3 回答