美文网首页
如何使用C/C++为Python编写DLL/SO

如何使用C/C++为Python编写DLL/SO

作者: 4thirteen2one | 来源:发表于2019-04-08 14:18 被阅读0次
    1. C/C++文件

      • 头文件
        test.h
        #ifndef _TEST_H_
        #define _TEST_H_
        int sum(int, int);
        #endif
        
      • C代码 test.c
        __declspec(dllexport) int sum(int a, int b) {
            return a + b;
        }
        
      • C++ 代码 test.cpp
        #define DLLEXPORT extern "C" __declspec(dllexport)
        DLLEXPORT int sum(int a, int b) {
            return a + b;
        }
        
        如果使用Windows操作系统来开发,需要使用__declspec(dllexport)的声明来说明这个函数是导出的;如果使用Linux操作系统,则这个声明省略。
        extern "C"声明避免编译器对函数名称进行name mangling,这对于使用C++来编写DLL/SO是必须的。
        为了提高可读性和可复用性,强烈建议使用#define来定义一个导出类型的宏,正如上面的test.cpp代码所示。
    2. 编译程序并生成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

    3. 使用ctypes来加载DLL/SO

      from ctypes import cdll
      mydll = cdll.LoadLibrary('test.dll')
      print(mydll)
      print(mydll.sum(1, 4))
      
    4. 可使用dumpbin工具来查看依赖和位数

    5. 参考资料
      How to write a DLL/SO in C/C++ for Python

    相关文章

      网友评论

          本文标题:如何使用C/C++为Python编写DLL/SO

          本文链接:https://www.haomeiwen.com/subject/xniuiqtx.html