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

2019-04-08  本文已影响0人  4thirteen2one
  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

上一篇 下一篇

猜你喜欢

热点阅读