C/C++ 生成的.so文件,python 用ctypes调用
2017-04-14 15:11
537 查看
注意:此生成的动态链接库必须cdll.LoadLibrary('/home/leo/test.so'),不能直接import test,如果想直接import 调用模块,请看http://blog.csdn.net/u013378306/article/details/70172076
如果使用C语言,新建test.c文件,并输入以下内容:
2
3
4
1
2
3
4
如果使用C++语言,新建test.cpp文件,并输入以下内容:
2
3
4
5
6
1
2
3
4
5
6
如果使用Windows操作系统来开发,需要使用
mangling,这对于使用C++来编写DLL/SO是必须的。
为了提高可读性和可复用性,强烈建议使用
2
1
2
如果使用Windows操作系统,并安装了Visual Studio的IDE,则可以创建一个新的Win32项目,并指定为DLL类型的空项目,然后将上面新建的两个源文件包含进去。最后编译生成一个DLL,输出为test.dll。
如果使用Linux操作系统,使用以下命令来生成.so:
对于Windows,进入test.dll所在目录,运行Python,然后输入以下命令:
对于Linux,运行python,然后输入以下命令:
值得注意的是,在Linux中,加载的路径需要指定为绝对路径。
1. 新建一个源码文件,里面包含了返回两个整数的和的函数
如果使用C语言,新建test.c文件,并输入以下内容:// test.c __declspec(dllexport) int sum(int a, int b) { return a + b; }1
2
3
4
1
2
3
4
如果使用C++语言,新建test.cpp文件,并输入以下内容:
// test.cpp #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT int sum(int a, int b) { return a + b; }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. 新建一个头文件(但不是必须的)
//test.h int sum(int, int);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中,加载的路径需要指定为绝对路径。
相关文章推荐
- Java在linux下调用C/C++生成的so文件
- c 生成.so 文件及 python 调用.so
- android jni方式调用c++代码并在其它app中使用生成的.so文件
- Java在linux下调用C/C++生成的so文件
- Java在linux下调用C/C++生成的so文件
- python用ctypes调用C库文件,并且实现字符串传入传出。。。。。
- c++调用python找不到py文件的可能原因
- linux下如何将c++程序编译成so,如何调用该so文件
- paip.java c# .net php python调用c++ c dll so windows api 总结
- python调用web接口生成csv格式文件
- c#调用c++生成dll文件中的类方法
- 查看python调用c++代码的代码实现位于那个cpp文件
- paip.java c# .net php python调用c++ c dll so windows api 总结
- 怎么根据linux c/c++ 开发的d-bus服务生成java 的调用接口文件
- C++调用python(python文件位置) 打包发布
- C++ 中调用执行Python文件
- 如何调用已有的SO文件来生成供Android使用的SO文件
- python中使用ctypes调用MinGW生成的动态链接库(dll)
- python中使用ctypes调用MinGW生成的动态链接库(dll)
- c++生成dll使用python调用dll的方法