Pytorch 学习(9):Python C 扩展( C、C++代码-----C so 代码库------python代码调用)

版权声明:王家林大咖2018年新书《SPARK大数据商业实战三部曲》清华大学出版,清华大学出版社官方旗舰店(天猫)https://qhdx.tmall.com/?spm=a220o.1000855.1997427721.d4918089.4b2a2e5dT6bUsM https://blog.csdn.net/duan_zhihua/article/details/83443556

 Pytorch 学习(9):Python C 扩展

 C、C++代码------>C so 代码库------->python代码调用

  •  VC 6.0 ++ 不建议使用,推荐使用cLion 集成开发环境。
  •  MinGW安装部署:windows 10 64 位,需安装mingw-w64版本(本地目录:G:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin),网络下载地址(https://sourceforge.net/projects/mingw-w64/)如果直接使用MinGW版本(本地目录:G:\MinGW\bin),MinGW编译的32位文件在windows 10 下运行报错:
runfile('D:/vcProjects2018/clion/python_c.py', wdir='D:/vcProjects2018/clion')
Traceback (most recent call last):

  File "<ipython-input-1-84d832d046c3>", line 1, in <module>
    runfile('D:/vcProjects2018/clion/python_c.py', wdir='D:/vcProjects2018/clion')

  File "G:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "G:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "D:/vcProjects2018/clion/python_c.py", line 6, in <module>
    adder = CDLL('./adder.so')

  File "G:\ProgramData\Anaconda3\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)

OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
  •  clion集成开发环境中新建一个add.c文件:

//sample C file to add 2 numbers - int and floats

#include <stdio.h>

int add_int(int, int);
float add_float(float, float);

int add_int(int num1, int num2){
    return num1 + num2;
}

float add_float(float num1, float num2){
    return num1 + num2;
}

使用gcc 进行编译:

D:\vcProjects2018\clion>gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c

在python中调用编译以后的c文件

# -*- coding: utf-8 -*-

from ctypes import *

#load the shared object file
adder = CDLL('./adder.so')

#Find sum of integers
res_int = adder.add_int(4,5)
print ("Sum of 4 and 5 = " + str(res_int))

#Find sum of floats
a = c_float(5.5)
b = c_float(4.1)

add_float = adder.add_float
add_float.restype = c_float
print ("Sum of 5.5 and 4.1 = ", str(add_float(a, b)))

python运行结果如下:

runfile('D:/vcProjects2018/clion/python_c.py', wdir='D:/vcProjects2018/clion')
Sum of 4 and 5 = 9
Sum of 5.5 and 4.1 =  9.600000381469727

猜你喜欢

转载自blog.csdn.net/duan_zhihua/article/details/83443556