python利用ctypes调用C++动态库
2021/7/22 11:35:42
本文主要是介绍python利用ctypes调用C++动态库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
用python调用C++动态库时,总是提示函数未找到,感觉大家也会遇到这种问题,就记录一下
先是错误示范
- 首先编写C++代码,新建test.cpp
int add(int a,int b){ return a+b; }
- 利用g++生成动态库
g++ test.cpp -fPIC -shared -o libtest.so
- 再编写python调用,新建python_ctypes.py
import ctypes if __name__ == '__main__': dl=ctypes.cdll.LoadLibrary lib=dl('./libtest.so') a=lib.add(2,3) print(a)
python python_ctypes.py
就会报以下错误
AttributeError: ./libtest.so: undefined symbol: add
经过查阅,发现c++的编译后,为了实现重载,函数名会被改变,这时候要使用使用c的方式进行编译,编译后的文件中仍然是定义的函数名。有两种方式解决这个问题
- 将文件后缀改为.c,然后利用gcc生成动态库
- 使用
extern "C" {}
,申明为C,利用g++使用c的方式编译
这里推荐第二种方式
- 重新写test.cpp文件
#include<iostream> extern "C"{ int add(int,int); } int add(int a,int b){ // 该函数需要接受三个参数 return a+b; }
- 然后再编译为动态库,调用就没问题了
这篇关于python利用ctypes调用C++动态库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享
- 2024-11-06Python 基础编程入门教程
- 2024-11-05Python编程基础:变量与类型
- 2024-11-05Python编程基础:变量与类型
- 2024-11-04Python编程基础:变量与类型