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
现在创建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 |