python读取c++/c

动态链接库在Windows中为.dll文件,在linux中为.so文件。以linux平台为例说明python调用.so文件的使用方法。

c代码:

int max(int a,int b)
{
    return a>b?a:b;
}

编译:gcc -fPIC -shared cma.c -o libmax.so

/*
 * # -shared 为链接库  让编译器知道是要编译一个共享库
 * # -fPIC(Position Independent Code)   编译生成代码与位置无关
 */

c++代码

#include<iostream>
using namespace std;
class TestLib
{  
    public:  
        void display();  
        void display(int a);  
};  
void TestLib::display() {  
    cout<<"First display"<<endl;  
}  
  
void TestLib::display(int a) {  
    cout<<"Second display:"<<a<<endl;  
}  

//C++想要编译成python可以调用的.so文件,必须加以下代码:
extern "C" {  
    TestLib obj;  
    void display() {  
        obj.display();   
      }  
    void display_int(int a) {  
        obj.display(a);   
      }  
}

编译:g++ -shared -o 12.so 12.cpp
##g++编译生成动态库libpycall.so:g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp。

from ctypes import cdll
import ctypes
cur = cdll.LoadLibrary('./libmax.so')
a = cur.max(1, 20)

print(a)


so = ctypes.cdll.LoadLibrary
# lib = so("./libdisplay.so")
lib = so("./libdisplay.so")

print('display()')
lib.display()

print('display(100)')
lib.display_int(ctypes.c_int(100))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值