文档章节

python调用C++

初雪之音
 初雪之音
发布于 2017/05/18 15:28
字数 261
阅读 79
收藏 2

python调用C++例子:

python只能调用C函数,所以对于C++我们需要extern "C"来辅助,先写一个工具类

#include <iostream>
using namespace std;

#ifndef _LIBOFCAL_H
#define _LIBOFCAL_H

class LibOfCal
{
    public:
        double add(double, double);
        double sub(double, double);
        double mul(double, double);
        double div(double, double);
};

double LibOfCal::add(double a,  double b) {
    return a + b;
}

double LibOfCal::sub(double a, double b) {
    return a - b;
}

double LibOfCal::mul(double a, double b) {
    return a * b;
}

double LibOfCal::div(double a, double b) {
    return a / b;
}

#endif

接着写一个CPP

/* g++ -o add.so -shared -fPIC add.cpp */
#include <iostream>
using namespace std;

#include "cal.h"

void Init()
{
    cout << "Init: OK" << endl;
}

extern "C" {
    bool testInit()
    {
        Init();
        return true;
    }

    LibOfCal obj;

    double add(double a, double b) {
        return obj.add(a, b);
    }
}

使用如下命令,生成*.so文件

g++ -o add.so -shared -fPIC add.cpp

注意,想要正确调用add函数,还必须在python中声明参数type,

#!/usr/bin/python
#coding=utf-8

import ctypes
from ctypes import c_double
from ctypes import c_bool

ll = ctypes.cdll.LoadLibrary
lib = ll("./add.so")

lib.testInit.restype = c_bool
lib.add.argtypes = [ c_double, c_double ]
lib.add.restype = c_double

print lib.testInit()
print lib.add(0.5, 7.9)

运行结果

$ pycall.py 
Init: OK
True
8.4

ctypes参数列表

Reference

http://www.cnblogs.com/mypsq/p/6114838.html

http://old.sebug.net/paper/books/scipydoc/ctypes_numpy.html

https://docs.python.org/2/library/ctypes.html

 

© 著作权归作者所有

共有 人打赏支持
初雪之音
粉丝 43
博文 265
码字总数 148651
作品 0
广州
程序员
linux下使用 boost.python 调用c++动态库

最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面。测试办法是让 robot framework 通过 SSHLIbrary 库执行远程机器上...

问天小凯
08/01
0
0
Python调用C/C++初步

测试库要求做到全部自动化--动态添加新的计算图像指标可以直接不用重写底层java程序……这段时间在学Python,由于Python的ctypes可以试python轻松调用动态链接库,从而调用c/c++程序,于是想...

索隆
2012/08/29
0
0
(转)LUA与python根本就不具有可比性

网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1、两者的定位不同。python的定位在于自身的独立开发,即是说python定位于自己能解决所有...

Yisen
2011/06/27
0
3
C/C++ 和 Python混合编程

链接:https://www.zhihu.com/question/23003213/answer/56121859 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 #include int main(int argc, char *...

sirius_0
04/21
0
0
SWIG入门6: Python Proxy Class和Builtin Type

在前几篇文章中,从一个较高的层次上说明了SWIG的基本用法。这篇文章会深入到SWIG的一些实现的细节中。SWIG默认的封装方式,是把C/C++的struct和class封装到Python Proxy Class中。不过从SWI...

costaxu
2012/09/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windbg学习记录

我开始熟练使用windbg是从帮助手册开始的,也就是.hh命令。 就像学习windows开发从msdn开始一样,微软的产品虽然不开源,但是文档做的是相当的好。然而那些开源的东西呢?开源的竞争力其实就...

simpower
9分钟前
0
0
学习scala的网站汇总

https://www.codacy.com/blog/how-to-learn-scala/

Littlebox
11分钟前
0
0
配置本地的cloud9开发环境

前言 说到在线IDE开发环境,cloud9是不能绕过的,cloud9支持很多语言,默认支持的就有Node.js,Python,Ruby,PHP,Go,更逆天的是,他还支持数据库,包括MySQL,MongoDB,Redis,SQLite。但...

Kefy
15分钟前
0
0
springcloud应用程序上下文层次结构

如果您从SpringApplication或SpringApplicationBuilder构建应用程序上下文,则将Bootstrap上下文添加为该上下文的父级。这是一个Spring的功能,即子上下文从其父进程继承属性源和配置文件,因...

itcloud
20分钟前
0
0
新程序员最爱的免费资源

简评:国外美女程序员推荐了她自己用过的一些免费资源,对新手比较友好的那种。 原作者 Ali Spittel,是个美女程序员,以下这些资源都是她自己试过的。以下「我」代表 Ali Spittel。 学 HTML...

极光推送
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部