python调用so库 不同编译器_解决python调用c/c++的.so库的段错误问题,和python调c/c++库要点...

本文介绍了如何使用Python的ctypes模块调用C/C++编译的动态库.so文件,强调了在C++中使用`extern "C"`避免名称修饰的必要性,以及Python中数据类型与C/C++对应的重要性。详细阐述了类型不匹配可能导致的段错误,并通过示例展示了如何处理字符串参数传递,包括避免段错误和正确接收返回字符串的方法。
摘要由CSDN通过智能技术生成

python中使用ctypes模块可以在python中直接调用C/C++。 首先要将C/C++编译成动态库(.so),之后python中调用即可

特别注意在调用C++函数需要在函数声明时,加入前缀“ extern “C” ”,这是由于C++支持函数重载功能,在编译时会更改函数名。在函数声明时,前缀extern "C"则确保按C的方式编译。

值得注意的是,一定要有函数输入输出类型的声明,int型不用转换,float和double类型需要进行转换, ctypes中的变量类型与C中对应如下:

ctypes数据类型    C数据类型 c_char                 char c_short                short c_int                    int c_long                 long c_float                 float c_double             double c_void_p             void c_uint8                unsigned char

这里如果c/c++的.so动态库的接口形参的类型python不存在则会报段错误!!

例如:

动态库接口为  string Example(string filePath );

python代码:

import ctypes from ctypes import * def convert_type(input):     ctypes_map = {int:ctypes.c_int,               float:ctypes.c_double,               str:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值