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-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识