Python 之 C C++ 混合编程_python脚本 编译c++

一、问题
  Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结。

二、Python调用C/C++
1、Python调用C动态链接库

Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。

(1)C语言文件:pycall.c

/***gcc -o libpycall.so -shared -fPIC pycall.c*/  
#include   
#include   
int foo(int a, int b)  
{  
  printf("you input %d and %d\n", a, b);  
  return a+b;  
}  

(2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译。

(3)Python调用动态库的文件:pycall.py

import ctypes  
ll = ctypes.cdll.LoadLibrary   
lib = ll("./libpycall.so")    
lib.foo(1, 3)  
print '***finish***'  

(4)运行结果:

2、Python调用C++(类)动态链接库

需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern “C”,构建后的动态链接库没有这些函数的符号表。
(1)C++类文件:pycallclass.cpp

#include   
using namespace std;  
  
class TestLib  
{  
    public:  
        void display();  
        void display(int a);  
};  
void TestLib::display() {  
    cout<<"First display"<

(2)g++编译生成动态库libpycall.so:g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp。

**(3)Python调用动态库的文件:**pycallclass.py

import ctypes  
so = ctypes.cdll.LoadLibrary   
lib = so("./libpycallclass.so")   
print 'display()'  
lib.display()  
print 'display(100)'  
lib.display_int(100) 

(4)运行结果:

3、Python调用C/C++可执行程序

(1)C/C++程序:main.cpp

#include   
using namespace std;  
int test()  
{  
    int a = 10, b = 5;  
    return a+b;  
}  
int main()  
{  
    cout<<"---begin---"<

(2)编译成二进制可执行文件:g++ -o testmain main.cpp。

(3)Python调用程序:

你可能感兴趣的:(python,c语言,c++)