python调用C++
python调用C++
初雪之音 发表于7个月前
python调用C++
  • 发表于 7个月前
  • 阅读 43
  • 收藏 2
  • 点赞 0
  • 评论 0
摘要: python调用C++

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

 

标签: Python C++ ctypes
共有 人打赏支持
粉丝 37
博文 229
码字总数 129645
×
初雪之音
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: