从C文件生成.so共享库文件,Windows下执行cc命令报错如何解决?
原命令适用环境
你查到的编译命令默认适用于类Unix操作系统(包括Linux、macOS、BSD等):
- 这类系统通常默认预安装了GCC或Clang C编译器,
cc是系统指向默认C编译器的通用软链接 -fPIC是类Unix平台下生成位置独立代码的专用参数,是编译共享库的必要选项.so是类Unix平台下共享库的标准后缀
Windows原生环境没有内置C编译器,也不存在cc系统指令,因此直接运行会触发命令不存在的报错。
Windows平台生成可被Python调用的C动态库的方案
你可以根据使用场景选择以下任意一种方案:
- 方案1:使用WSL(Linux子系统)
开启WSL功能后安装任意Linux发行版,在WSL终端内可以直接运行原教程的编译命令,生成的.so文件可在WSL环境内的Python直接调用,无法给原生Windows环境的Python使用。 - 方案2:使用MinGW-w64编译器
安装MinGW-w64并将其bin目录添加到系统环境变量PATH后,在终端执行以下命令生成Windows兼容的动态库:gcc -shared -o my_functions.dll my_functions.c
MinGW环境下不需要添加-fPIC参数,生成的.dll文件可以直接给原生Windows环境的Python调用。 - 方案3:使用MSVC(Visual Studio编译器)
安装Visual Studio的桌面C++开发组件后,打开VS专用的开发者命令提示符,执行以下命令生成dll:cl /LD my_functions.c /Fe:my_functions.dll
Python跨平台调用兼容写法
如果需要代码兼容多平台,可以通过判断系统类型加载对应动态库:
import ctypes import os import platform system = platform.system() if system == "Windows": lib = ctypes.CDLL(os.path.abspath("my_functions.dll")) else: lib = ctypes.CDLL(os.path.abspath("my_functions.so"))
内容的提问来源于stack exchange,提问作者Ogiad
相关产品推荐
相关产品推荐

