Python中可以使用
python setup.py build -c mingw32 install
安装包含C++扩展的第三方库,但需要先安装MinGW 5.1.4及以后版本,并将C:\MinGW\bin
目录加入到环境变量。
安装过程中可能会出现以下错误:
- gcc: error: unrecognized command line option ‘-mno-cygwin’
解决方法:修改C:\Python27\Lib\distutils\cygwinccompiler.py
文件,去掉里面出现的-mno-cygwin
undefined reference to ‘_imp__PyExc_TypeError’
解决方法:- 在MinGW中安装pexports工具
- 执行命令
pexports C:\Windows\SysWOW64\python27.dll > python27.def
,在当前目录下生成python27.def文件 - 执行命令
dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a
,在当前目录下生成libpython27.a文件,并移动到C:\Python27\libs
目录中
编译出的pyd无法加载
报错信息为:ImportError: DLL load failed: 找不到指定的模块。
。
运行ctypes.windll.kernel32.LoadLibraryA(pyd_path)
,报错如下:
解决方法如下:
修改文件C:\Python27\Lib\distutils\cygwinccompiler.py
,类CygwinCCompiler
的构造函数中使用了如下逻辑:
# ld_version >= "2.13" support -shared so use it instead of
# -mdll -static
if self.ld_version >= "2.13":
shared_option = "-shared"
else:
shared_option = "-mdll -static"
在高版本中默认使用了动态链接,强制改成静态链接,重新编译即可。