C/C++ 生成的.so文件,python 用ctypes调用
来源:互联网 发布:怎么开淘宝店 编辑:程序博客网 时间:2024/04/30 05:15
注意:此生成的动态链接库必须cdll.LoadLibrary('/home/leo/test.so'),不能直接import test,如果想直接import 调用模块,请看http://blog.csdn.net/u013378306/article/details/70172076
1. 新建一个源码文件,里面包含了返回两个整数的和的函数
如果使用C语言,新建test.c文件,并输入以下内容:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
如果使用C++语言,新建test.cpp文件,并输入以下内容:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
如果使用Windows操作系统来开发,需要使用__declspec(dllexport)
的声明来说明这个函数是导出的;如果使用Linux操作系统,则这个声明省略。 extern "C"
声明避免编译器对函数名称进行name mangling,这对于使用C++来编写DLL/SO是必须的。
为了提高可读性和可复用性,强烈建议使用#define
来定义一个导出类型的宏,正如上面的test.cpp代码所示。
2. 新建一个头文件(但不是必须的)
- 1
- 2
- 1
- 2
3. 编译程序并生成DLL/SO
如果使用Windows操作系统,并安装了Visual Studio的IDE,则可以创建一个新的Win32项目,并指定为DLL类型的空项目,然后将上面新建的两个源文件包含进去。最后编译生成一个DLL,输出为test.dll。
如果使用Linux操作系统,使用以下命令来生成.so:
gcc -fPIC -c test.c gcc -shared -o test.so test.o
4. 使用ctypes来加载DLL/SO
对于Windows,进入test.dll所在目录,运行Python,然后输入以下命令:
>>> from ctypes import cdll >>> mydll = cdll.LoadLibrary('/home/leo/test.so') >>> mydll.sum(1, 4) 5
对于Linux,运行python,然后输入以下命令:
>>> from ctypes import cdll >>> mydll = cdll.LoadLibrary('/home/leo/test.so') >>> mydll.sum(1, 4) 5
值得注意的是,在Linux中,加载的路径需要指定为绝对路径。
0 0
- C/C++ 生成的.so文件,python 用ctypes调用
- c 生成.so 文件及 python 调用.so
- python ctypes - python调用C语言库
- ctypes: 使用python调用C编写的动态链接库
- python用ctypes调用C库文件,并且实现字符串传入传出。。。。。
- Python 使用ctypes调用 C 函数
- Python调用ctypes使用C函数printf
- Python 使用ctypes调用 C 函数
- Python 使用ctypes调用C/C++
- python使用ctypes调用C/C++
- LINUX下PHP生成并调用C的.so文件
- php调用C语言生成的so文件
- mac下lua调用c生成的so文件
- 用 Python ctypes 来调用 C/C++ 编写的第三方库
- 用 Python ctypes 来调用 C/C++ 编写的第三方库
- Python与C之间的相互调用(Python C API及Python ctypes库)
- Python与C之间的相互调用(Python C API及Python ctypes库)【转】
- Python与C之间的相互调用(Python C API及Python ctypes库)
- cxf配置环境提示文件名、目录不存在的问题
- javaoop 第10章
- strrchr
- Laravel artisan 命令工具
- Android中TabLayout和ViewPager的结合使用
- C/C++ 生成的.so文件,python 用ctypes调用
- 如何生成密钥文件Snk
- Android 仿微信刷新旋转小风车 自定义view
- 不同hadoop版本之间迁移数据存在问题, Check-sum
- 微信支付JSAPI支付
- windows下yeoman安装
- autoencode
- 兼容其他不支持placeholder的浏览器(超强的让IE下支持placeholder的属性插件)
- 华为云linux搭建tomcat