Python调用C++库

0x1起因

python项目中涉及到其他加解密模块,但是都是用c++实现的,用python重新实现一套麻烦且难以维护,而python调用c++动态库也很方便, 所以有了本文

0x2编译动态库.so

encryptrc.cpp

#include <iostream>  
using namespace std;  

class TestLib  
{  
    public:  
        char* decrypt(char* input);  
};  
char* TestLib::decrypt(char* input) {  
    // 解密实现
}  

extern "C" {  
    TestLib obj;  
    char* decrypt(char* input) {  
       return obj.display(input);   
    }
}  

编译成动态库

g++ -o encryptrc.so -shared -fPIC encryptrc.cpp  

0x3 python调用

import ctypes

so = ctypes.cdll.LoadLibrary  
lib = so("encryptrc.so")  
lib.decrypt.restype = ctypes.c_char_p  
value = lib.decrypt(ctypes.c_char_p(b'加密字符串内容'))  
print(str(value))  

0x4 参考文档