C++ Boost 之Python(生成一个扩展模块)

recompile with -fPIC /usr/local/lib/libboost_python.a: could not read symbols: Bad value 在用boost库的时候遇到了一些挫折,本文记录下来方便大家参考:1. 阅读详情

c++boost.gif (8819 bytes)生成一个扩展模块

Boost的Build过程,就想大家希望的那样,正在经历一些演化和改进.下面的一些事实可能会有帮助:


在Boost的子目录 libs/python/build下有各种平台上的Make文件和一个Visual Studio工程. Build的目标包括:
  • 扩展模块使用的boost_python静态连接库.在各种Unix平台上库的文件是libboost_python.a. 当你使用Visual C++的时候,库文件是boost_python.lib.

     

  • Boost.Python库特性的一个全面的测试用例.这个测试用例先建造一个Boost.Python扩展模块, 然后运行Python来导入这个模块,接下来使用doctest对库进行一系列的测试.模块和测试用例的源代码在Boost的子目录 libs/python/test下可以找到.

     

  • Boost子目录libs/python/example下的各种例子程序.在这些例子中包含一个基于上面介绍的那个全面 测试用例的doctest.

Boost包含一组将 boost_python库编译成静态连接版本的make文件(这些make文件支持在各种平台上同时编译,支持稳定的一组特性), 一个全面的测试用例的make文件,以及 libs/python/example目录下所有例子的make文件. 这些make文件的使用方法在这里
还有专门为GNU make准备的另外一组make文件.这些make文件比上面的那些make文件要简练许多,但是可编译成的目标并没有那么完整,而且 不支持在多种平台上的同时编译.
Boost提供了一个Microsoft Visual Studio的工程文件: libs/python/build/build.dsw. 这个工程的include路径可能需要根据你的安装做一些改变.工程假设python被安装在 c:/tools/python下. 这个工程对所有的目标提供了三种配置选项:
  • Release (优化, -DNDEBUG)
  • Debug (未优化 -D_DEBUG)
  • DebugPython (未优化, -D_DEBUG -DBOOST_DEBUG_PYTHON)

在Visual C++中使用-D_DEBUG选项来build扩展模块的时候.Python默认强制使用一个特殊的调试版本DLL连接. 因为Python的windows版本默认安装并不提供这个调试版本的DLL,所以Boost.Python在Python.h被Include的时候 使用boost/python/detail/wrap_python.hpp 来临时的取消_DEBUG的定义.

如果希望库的调试版本的额外的运行时检查特性可以使用,你可以加入如下定义:#define BOOST_DEBUG_PYTHON来重新激活, 并且和boost_python.lib的调试版本连接.你必须获得Python调试版本的可执行文件(python_d.exe)和DLL (python20_d.dll or python15_d.dll). Python的源程序中包含项目文件来构造这些东西. 如果你是下载的源程序,把最上层目录的名字改成src, 然后将它安装在c:/tools/python下面,这样 Boost.Python提供的项目文件不用改变就能使用了.只要打开 c:/tools/python/src/pcbuild/pcbuild.dsw,执行 "build all"就可生成debug版本.

如果你没有定义#define BOOST_DEBUG_PYTHON,确认所有的源文件使用#include<boost/python/detail/wrap_python.hpp>来代替通常的 Python.h,否则你就会碰到连接问题.


如果你使用的平台没有被直接支持,你可以使用下面的源文件生成一个静态版本的库(在Boost的子目录 libs/python/src下), 或者直接编译一下然后将目标文件和你的扩展模块连接:
Next: 封装枚举 Previous: 内幕一瞥 Up: Top

© David Abrahams 2001 版权所有. 本文档允许复制、使用、修改、出售和分发,前提是这个版权声明必须出现在所有的拷贝上。本文档的提供不承担任何直接或隐含的保证,并且不做其适合任一目的之声明。

更新日期: 2001年4月17日(R.W. Grosse-Kunstleve)

boost.python boost.numpy python 和 C++联合编程 一 python的numpy.array传给C++处理 1.安装boost,boost-python,boost-numpy 2.主要程序 2.1 vectors.cpp #include<cmath> #include<boost/python/module.hpp> #include<boost/python/def.hpp> #include&lt... 阅读详情

相关推荐

C++中用Boost::Python调用Python模块

在C++中用Boost::Python调用Python模块,过程及避坑指南。

Dlite的技术笔记 6640

Boost::Python的安装与调用教程

Boost::Python库是pyhon和c++相互交互的框架,可以在Python中调用C++的类和方法,也可以让C++调用Python的类和方法。 Python自身提供了一个Python/C++ API用来实现Python和C++的交互。Boost::Python是Python/C++ API的包装,所以用起来更简单一些。 Python对一个动态类型的语言,C++是一个静态类型的语言,对于P...

鹊踏枝-码农的专栏 2万+

Boost之Python

需要注意的是,尽管 Boost::Python 提供了许多便利的功能,但它的实现依赖于 Python/C API,因此在使用时要结合 Python/C API 的相关知识。此外,Boost::Python 的某些功能可能还不完善,需要开发者对 Python/C API 有一定的了解,以便在遇到问题时能够进行调试和解决。总的来说,Boost::Python 为 C++ 和 Python 之间的互操作提供了一个强大而灵活的工具,使得开发者能够充分利用两种语言的优势,实现更加高效和强大的应用程序。

qq_33271629的博客 3254

安装Carla,make pythoneAPI找不到 libboost_python36.a,解决方法

安装Carla,make pythoneAPI找不到 libboost_python36.a,解决方法

weixin_56975573的博客 550

Boost(2):boost.python库介绍及简单示例

1. boost.python介绍 将c/c++的函数接口转换为Python接口有好几种解决方案,不同于C语言的简单直接,C++因使用了大量的面向对象编程的思想导致转换为Python接口时相对比较复杂,boost.python的目标就是为了简单方便地将C++程序转换成Python的接口。 BoostPython库是boost c++库的其中一个子库,使用它可以轻松地将C++的函数接口转换成Python接口。在大部分情况下你不需要对原先的C++代码做任何修改,boost.python会对C++类再做一层封装,

翔底的博客 1万+

使用boost::python模块实现通用函数或ufunc的示例编程

在boost::python模块中,我们可以使用通用函数(universal function,简称ufunc)来处理数组数据,类似于NumPy中的ufunc。使用boost::python模块,您可以将Python的灵活性和功能与C++的性能和效率相结合,为您的应用程序提供更多的可能性。接下来,我们将使用一个简单的示例来说明如何使用boost::python模块创建通用函数或ufunc。在上述Python代码中,我们首先导入了addition模块,然后使用"add"函数进行加法运算,将结果打印出来。

HackDashX的博客 163

C++封装python接口(libboost-python)

摘要在Python技术文档中可以找到关于Python与C++之间相互调用的部分。分别叫做extending和Embedding。可以参考技术文档Extending and Embedding the Python Interpreter。于此同时,还提供了 Python/C API接口Python/C API Reference Manual。虽然对于简单的调用使用起来很方便,但对于复杂的结构、封装

SUN_DRAGON的专栏 5607

libboost_python

带-fPIC编译出来的libboost_python.a静态库,boost自带工具无法编译出这样的库。这个库可以解决如下编译错误问题! /usr/bin/ld: libboost_python.a(from_python.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC libboost_python.a: could not read symbols: Bad value

C++ Boost 之Python(生成一个扩展模块) (转)

C++ Boost 之Python(生成一个扩展模块) (转)[@more@] 2003-7-201541451.gif" width=277 align=center>生成一个扩展模块 Boost的Build过程,就...

cuiji1279的博客 196

boost python静态库

boost 1.47在VS2010下编译好的静态库 release版本:libboost_python-vc100-mt-1_47.lib debug版本:libboost_python-vc100-mt-gd-1_47.lib

boost.python 编写扩展python库

环境 vs2008 构建 python26 boost_1_44 使用boost.python 编写扩展python库,使用mfc例子调用扩展的python库。 myPydll 工程为扩展python库,生成文件myPydll.dll,将该文件拷贝到python解释器可搜索的路径下,如我的电脑就是“C:\Python26\DLLs”,并改后缀名为pyd。即文件myPydll.pyd。或者与当前测试的程序在同一目录,如测试程序test.exe与myPydll.pyd在同一目录,test.exe即可正常运行 test 工程是测试调用自己编写的python扩展库的mfc例子。 文件 pyinit.hpp 是vc中使用python时的初始化封装 使用的boost库版本是1.44,我的boost库路径是“D:\Program Files\Code\boost_1_44_0” boost_python-vc90-mt-gd-1_44.dll boost_python-vc90-mt-gd-1_44.lib 文件夹中的dll和lib等文件是 boost.python库的动态库和lib的release和debug版。

MinGW(GCC)和boost.python

摸索使用MinGW和boost.python确实是件头痛的事情,花了我好几天的时间.废话少说,步入正题: 编译环境: windows xp sp3、MinGW(GCC) 4.5.2、boost 1.49 第一步:正确安装MinGW(安装tdm-gcc-4.6.1.exe比较方便)和下载boost 1.49,这个网上搜一下就行了。 第二步:解压缩boost_1_49_0.zip到任意的目录,

网海水手 3432

嵌入式系统存储体系

主要分为三种:高速缓存(cache)、主存和外存。

weixin_43586667的博客 2265

python 调用c++

在这一步中,我们并不需要去关心它具体是如何工作的,我们只需要知道:当我们在文件中定义了一个函数后,就可以向该函数发出调用请求。当这些操作完成后,我们就可以在文件中看到一个名为 explain ()的文件了,它是一个函数库,其中包含了许多不同类型的函数。函数调用,也叫函数调用,是指在程序中使用一个函数的时候,直接从函数地址出发,向目标函数发出一次操作。另外还有一种方法:如果你使用了` find ()`命令搜索到了“C++”这个函数地址,那么你就可以直接在运行时环境中查看该被调用的“C++”这个函数。

花生日记 5841

TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

HRPWM的学习记录。

whyorwhnt的专栏 9534

万象RK3506-EG1800网关使用说明

摘要:HD-RK3506-EG1800是一款高性能工业物联网边缘计算网关,支持Buildroot和Ubuntu双系统。文档详细介绍了网关的网络配置(包括ETH0/ETH1的静态IP设置、WiFi连接)、时钟同步、HSL软件安装配置(含开机自启动服务)、系统日志优化以及刷机操作指南(Loader/Maskrom模式)。特别提供了基于lighttpd的网页管理方案,通过HTML界面实现网络参数可视化配置,包含身份验证、实时状态显示和表单提交功能。网关默认ETH0固定IP为192.168.1.10,提供完整的CL

tian_jiangnan的博客 174

Python宝典第22章:Python扩展和嵌入

用C/C++扩展Python

松鼠麒麟的专栏 425

C#程序突然崩溃怎么办?5分钟学会分析Dump文件(Visual Studio 2022实战)

本文详细介绍了在C#程序崩溃或无响应时,如何捕获并分析Dump文件以快速定位问题。通过Visual Studio 2022实战演示,重点讲解了配置符号服务器、解读调用堆栈与内存状态,以及针对CPU飙高、内存泄漏等典型场景的分析方法,帮助开发者高效进行故障诊断。

docker8compose的博客 474

Python封装的性能研究

Python Wrapper Tools: A Performance Study● Manual wrapping is still fastest and most versatile● SIP, Boost and Babel generate native extension modules with low overhead● SWIG-generated modules r

金庆的专栏 1740

轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)

本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。

weixin_29186249的博客 311

青岛鼎信Java开发面试题及参考答案(3万字长文,多张原理图)

MySQL 的事务特性有哪些? MySQL 事务具有四个重要特性,被称为 ACID 特性。 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么全部执行,要么全部不执行。例如,在银行转账场景中,从账户 A 转账到账户 B,包括扣减账户 A 的金额和增加账户 B 的金额这两个操作必须作为一个整体来完成。如果在执行过程中发生错误,比如系统崩溃或者数据库出现故障,那么已经执行的部分必须全部回滚,就好像整个转账操作从未发生过一样。 一致性(Consistency):事务必须

大模型大数据攻城狮的专栏 1086

python的胶水特性是怎样出来的_使用python作为胶水

使用python作为胶水¶没有比每个人都无聊的谈话了同意。--- 蒙塔尼米歇尔管道胶带就像一股力量。它有光明的一面和黑暗的一面,以及它把宇宙联系在一起。--- 卡尔茨瓦齐格许多人喜欢说,Python是一种奇妙的粘合语言。希望这一章能让你相信这是真的。Python在科学上的第一个采用者通常是那些使用它来粘合在超级计算机上运行的大型应用程序代码的人。不仅用python编写代码比用shell脚本或per...

weixin_29302047的博客 703

FPGA实践教程: 使用HLS将C程序生成IP核心进行FPGA开发

请根据您使用的FPGA开发板和供应商选择适当的HLS工具,并按照他们的安装指南进行安装。根据您使用的FPGA开发板和供应商选择适当的HLS工具,并按照他们的安装指南进行安装。通过本教程,您了解了如何使用HLS工具将C程序生成IP核心,并将其用于FPGA开发。在HLS项目中,您可以对C程序进行设计和优化,以生成对应的IP核心。在HLS项目中,您可以对C程序进行设计和优化,以生成相应的IP核心。将导出的IP核心导入到FPGA项目中。使用FPGA开发环境的菜单中的"导入"或"添加文件"选项导入IP核心。

CqpFsharp的博客 454
上一篇: C++ Boost 之Python(大纲)
下一篇: C++ Boost 之Python(一个简单的例子)
铜戈
博客等级 码龄26年 14粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值