云网牛站
所在位置:首页 > Linux编程 > Linux/Unix下Python代码调用C/C++共享库

Linux/Unix下Python代码调用C/C++共享库

2017-10-19 21:24:17作者:Linux编辑稿源:topspeedsnail

Linux/Unix下的共享库扩展名为.so文件,和Windows的*.dll文件类似。共享库中一般包含通用的函数和类。当需要使用共享库中的功能时,它会被系统加载到内存中,它只会被加载一次。

对于加载到内存的共享库一般会有一个引用计数,用来跟踪有多少应用在使用这个共享库。当一个共享库的引用计数为0时,表示已经没有程序使用这个共享库了,操作系统会释放这个共享库占用的内存。

为了容易理解,我们用C/C++创建一个简单的共享库。然后在Python代码中调用共享库里的函数。

 

testLib.cpp:

extern "C"

{

// 两个整数相加

int myAdd(int a, int b)

{

return a + b;

}

// 两个整数相减

int mySub(int a, int b)

{

return a - b;

}

// 两个整数相乘

int myMul(int a, int b)

{  

return a * b;

}

}

 

把上面代码编译为共享库:

g++ -Wall -O3 -shared testLib.cpp -o testLib.so

 

-Wall:输出所有警告信息。

-shared:指示编译为共享库。

-O:打开优化。

-o:指定输出文件名。

 

生成testLib.so

Linux/Unix下Python代码调用C/C++共享库

 

现在创建Python代码:

test.py:

#!/usr/bin/python

import ctypes

def main():

testLib = ctypes.cdll.LoadLibrary('./testLib.so')

print testLib.myAdd(1, 2)

if __name__ == '__main__':

main()

 

执行python脚本:

python test.py

精选文章
热门文章