首先需要保证Python与gcc的位数一致 (已知位数一致可以跳过该节): 1)查看Python位数: Python环境中输入以下代码:
import platform platform.architecture()输出如下:
('64bit', 'WindowsPE')2)查看gcc位数: CMD命令行中输入以下命令:
gcc -v注意到输出中有以下:
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)我的Python与gcc的位数是一致的,无需更改。 不一致时,请保持一致。当然,重新下载MinGw要简单些,可以前往以下博客查询帮助: https://blog.csdn.net/qq153471503/article/details/84494090
1)以以下测试代码为例:
/*** gcc -o D:\Program\Code\C\test\test.so -shared -fPIC D:\Program\Code\C\test\test.c */ #include <stdio.h> #include <stdlib.h> int myAdd(int a, int b) { return a+b; }2)于CMD中输入以下命令:
#格式为:gcc -o 保存路径.so -shared -fPIC 读取路径.c gcc -o D:\Program\Code\C\test\test.so -shared -fPIC D:\Program\Code\C\test\test.c文件生成成功:
调用示例如下:
import ctypes if __name__ == '__main__': temp_path = "../CLib/test.so" # c_lib = ctypes.cdll.LoadLibrary(temp_path) c_lib = ctypes.CDLL(temp_path) print(c_lib.myAdd(1, 2))输出3说明调用成功。 这一步可能出错,可以尝试使用:
#-m64强制指定位数 gcc -o D:\Program\Code\C\test\test.so -shared -fPIC D:\Program\Code\C\test\test.c -m64这里对参数的传递进行简单说明。例如,当myAdd函数所需参数是两个C中的float型,那么需要使用ctypes.c_float(1)来指定类型。 ctypes库的优势在于内置在python中,对于最初的练习很有帮助,但是随着任务的复杂化,该库的使用将变得相对繁琐。
[1] https://blog.csdn.net/budding0828/article/details/89344888 [2] https://blog.csdn.net/qq1083062043/article/details/86638619 [3] https://blog.csdn.net/qq153471503/article/details/84494090 [4] https://blog.csdn.net/weixin_30372371/article/details/98428391?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param