iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++使用boost.python编写P
  • 230
分享到

C++使用boost.python编写P

boostpython 2023-01-31 07:01:50 230人浏览 独家记忆
摘要

很久没有写文章了,今天整理了一些东西,在这里分享一下。 最近一直在想用c++封装一些在工作中常用的python扩展模块,因为之前没有用C++写过类似的东西,因此一直在网上找一些文章,但是我发现好多文章都描述的不是很清晰,对于老鸟来说应该会很

很久没有写文章了,今天整理了一些东西,在这里分享一下。

最近一直在想用c++封装一些在工作中常用的python扩展模块,因为之前没有用C++写过类似的东西,因此一直在网上找一些文章,但是我发现好多文章都描述的不是很清晰,对于老鸟来说应该会很容易,但是像我这种初学者,肯定会造成很大的困扰,因为总是出现很多的报错,搞的头很大,因此我将成功的案例分享一下,并且详细的解释下让我产生疑惑的地方。

boost.Python

简单描述

C++写python扩展模块有很多种方式,我选择的是boost.python来编写的,感觉这个要比其他的方式要简单很多,写很少的boost.python代码就可以,这样就可以更专注的去写C++的程序。

boost.python的科普就不必多说了,可以自行Google,我也是自己google的。

安装

这里仅介绍ubuntu的安装方式:

sudo apt-get install libboost-all-dev

或者

sudo apt-get install libboost-python-dev
# 这种方式我没有尝试,你们可以自己试试

源码安装也是可以的,但是需要配置好环境变量,否则编译的时候总是编译不过去,当前直接在编译的时候指定需要的路径也是可以的。

实例

C++ 代码

下面的例子将一些模糊的点,做了一下描述。

#include <iOStream>
#include <string>
#include <boost/python.hpp>   // 必须引入这个头文件

using namespace boost::python;

class HelloWorld{
public:
    HelloWorld(const std::string& name, int age);

    void printInfo();

private:
    std::string m_name;
    int m_age;
};

HelloWorld::HelloWorld(const std::string& name, int age):m_name(name), m_age(age){

}

void HelloWorld::printInfo(){
    std::cout << "我叫" << m_name << ", " << m_age << "岁了" << std::endl;
}

void ceshi(){
    std::cout << "ceshi" << std::endl;
}

BOOST_PYTHON_MODULE(helloworld){
    // 类导出成Python可调用的动态链接库文件的方式
    class_<HelloWorld, boost::noncopyable  > 
            ("helloworld", init<const std::string&, int>())//导出类中的方法
            .def("printinfo", &HelloWorld::printInfo);

    // 普通函数导出成Python可调用的动态链接库文件的方式
    def("ceshi",&ceshi);
}

编译的命令

下面的命令是我在编译动态链接库文件的命令,根据自己的实际情况修改。

# python3
g++ -shared -o helloworld.so -fPIC -I/usr/include/python3.6m/ helloworld.cpp -lpython3.6m -lboost_python3

# python2
g++ -shared -o helloworld.so -fPIC -I/usr/include/python2.7/ helloworld.cpp -lpython -lboost_python

简单介绍下参数
    -shared    // 指定生成动态链接库
    -o    // 生成的动态链接库的名称
    -fPIC    // 表示使用地址无关代码
    -I(大写的i)    // 表示将/usr/include/python2.7/目录作为第一个寻找头文件的目录、
    -l    // 指定需连接的库名

没有报错的话会在当前目录下生成一个名叫helloworld.so的动态链接库文件,直接在当前目录进入Python shell就可以测试,当然你直接放入到Python的site-packages目录中也是可以直接在Python Shell环境中引入的。

验证结果

>>> import helloworld
>>> hw = helloworld.helloworld("lanyulei", 18)
>>> hw.printinfo()
我叫lanyulei, 18岁了

如果文章中步骤有不对的地方的话,请指出,我会在最快的时间内修改好,谢谢。

--结束END--

本文标题: C++使用boost.python编写P

本文链接: https://www.lsjlt.com/news/191017.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++使用boost.python编写P
    很久没有写文章了,今天整理了一些东西,在这里分享一下。 最近一直在想用C++封装一些在工作中常用的Python扩展模块,因为之前没有用C++写过类似的东西,因此一直在网上找一些文章,但是我发现好多文章都描述的不是很清晰,对于老鸟来说应该会很...
    99+
    2023-01-31
    boost python
  • linux中使用boost.python调用c++动态库的方法
    前言 最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面。测试办法是让 robot framework...
    99+
    2022-06-04
    linux使用python linux boost.python linux调用动态库
  • 怎么使用C/C++编写node.js原生模块
    这篇文章主要讲解了“怎么使用C/C++编写node.js原生模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用C/C++编写node.js原生模块”吧!Hello World不能免俗...
    99+
    2023-06-17
  • 如何使用C/C++编写node.js原生模块
    这篇文章主要为大家展示了“如何使用C/C++编写node.js原生模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用C/C++编写node.js原生模块...
    99+
    2022-10-19
  • 如何使用Dev C++编写C语言程序
    本篇内容介绍了“如何使用Dev C++编写C语言程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C语言是什么C语言是一门面向过程的、抽象化...
    99+
    2023-06-08
  • 如何使用V8编写C++插件
    本篇内容介绍了“如何使用V8编写C++插件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写个测试例子const { De...
    99+
    2023-06-15
  • 怎么使用emacs编写C语言
    这篇文章主要介绍“怎么使用emacs编写C语言”,在日常操作中,相信很多人在怎么使用emacs编写C语言问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用emacs编写C语言”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • 使用emacs编写C语言教程
    如何使用emacs编写c语言程序,并编译运行 vi和emacs被分别被称为编辑器之神和神之编辑器。vi的入门精通都很难,emacs入门容易,精通难;vi使用起来不停地切换模式,而em...
    99+
    2022-11-12
  • 如何使用emacs编写C语言
    这篇文章主要介绍“如何使用emacs编写C语言”,在日常操作中,相信很多人在如何使用emacs编写C语言问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用emacs编写C语言”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • 详解Dev C++使用教程(使用Dev C++编写C语言程序)
    前面我们给出了一段完整的C语言代码,就是在显示器上输出“C语言中文网”,如下所示: #include <stdio.h> int main() { puts("C...
    99+
    2022-11-11
  • 使用c# 怎么编写一个ORM框架
    今天就跟大家聊聊有关使用c# 怎么编写一个ORM框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. ORMORM全称 Object Relational Mapping,翻译过来...
    99+
    2023-06-14
  • VS2017使用教程(使用VS2017编写C语言程序)
    以下是使用VS2017编写C语言程序的简单教程:步骤1:安装VS2017首先,你需要从官方网站下载并安装Visual Studio ...
    99+
    2023-09-13
    C语言
  • 为什么Unix不用C++而是用C编写
    本篇内容主要讲解“为什么Unix不用C++而是用C编写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么Unix不用C++而是用C编写”吧!有人总会说C++不...
    99+
    2022-10-19
  • 怎么使用c语言编写抽奖转盘
    编写抽奖转盘的C语言代码可以分为以下几个步骤:1. 导入必要的头文件:```c#include #include #include ...
    99+
    2023-08-15
    c语言
  • 使用c语言编写一个爱心效果
    使用c语言编写一个爱心效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、说明用函数分别控制行间隔,输出*(爱心用*够成),换行。然后每个涵数内加一层循环,用数组控制循环次数...
    99+
    2023-06-15
  • 如何在MySQL中使用C#编写存储过程
    如何在MySQL中使用C#编写存储过程在MySQL数据库中,存储过程是一组预定义的SQL语句,可以以一定的逻辑顺序组合成一个单元的程序。它可以用于简化和优化数据库操作,并提高应用程序的性能和安全性。C#是一种广泛使用的编程语言,具有强大的数...
    99+
    2023-10-22
    MySQL C# 存储过程
  • 怎么使用c语言编写简单小游戏
    编写一个简单的猜数字小游戏的例子:```#include #include #include int main() {int ran...
    99+
    2023-08-31
    c语言
  • 怎么用visual studio编写c++语言
    要在Visual Studio中编写C++语言代码,您可以按照以下步骤进行操作: 下载并安装Visual Studio:您可以从...
    99+
    2023-10-25
    c++
  • 用C语言编写爱心代码
    以下是一个使用C语言编写的爱心代码:```c#include int main() {int i, j, n;n = 6;for (...
    99+
    2023-09-15
    C语言
  • 如何在MySQL中使用C#编写自定义函数
    在MySQL中使用C#编写自定义函数需要以下步骤:1. 创建一个C#类库项目,并添加对MySQL.Data.dll的引用。2. 在C...
    99+
    2023-10-20
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作