问题描述

  • windows8.1下anaconda X64与MinGW X64,利用weave.inline编译C代码,compiler = 'gcc'指定编译器为gcc
  • 提示Looking for python27.dllmsvcr90d.dll not found
  • mac下未出现此问题

问题分析

  • 主要是x64 python与x64 MinGW兼容问题,建议使用MS SDK C++ compiler代替MinGW
    Do not use MinGW-w64. As you will notice, the MinGW import library for Python (e.g. libpython27.a) is omitted from the AMD64 version of Python. This is deliberate. Do not try to make one using dlltool. [...] There have also been issues with the mingw runtime conflicting with the MSVC runtime; this can happen from places you don't expect, such as inside runtime libraries for g++ or gfortran.

解决方案尝试

  • github中kivy项目wiki提供
    • 复制python27.dll文件到anaconda目录下的Libs文件夹中,命令行执行以下命令(保证MinGW的bin目录在系统环境变量中)
      cd C:\dev-64\Python27\libs
      rename python27.lib old_python27.lib
      gendef python27.dll
      dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a
    • 更改anaconda\Include\pyconfig.h文件,将文件中以下代码(大概在141行)剪切到#ifdef _MSC_VER(大概在107行)这行上面
      #ifdef _WIN64
      #define MS_WIN64
      #endif
    • 更改anaconda\Lib\distutils\cygwinccompiler.py文件,将self.dll_libraries = get_msvcr()这行注释掉(大概在343行)
  • Stackouverflow中的
    • 删除anaconda\Libs下的msvcr运行库文件,类似libmsvcr100.alibmsvcr90.a的文件
    • anaconda\Lib\distutils\distutils.cfganaconda\Lib\site-packages\numpy\distutils\distutils.cfg文件中添加如下编译器指定语句,文件不存在则新建,编译器类型按使用的指定
      [build]
      compiler = mingw32
    • anaconda\Lib\site-packages\numpy\distutils\mingw32ccompiler.py文件中的build_msvcr_libaray(debug=False)函数中,将return False作为函数的第一句

最终正确方案

  • 命令行执行以下命令将mingwpy包安装到anaconda的包环境目录中,看名字就能猜出是针对python的MinGW包
    pip install -i https://pypi.anaconda.org/carlkl/simple mingwpy

参考以下内容:

最后由 oucb 编辑于2016年06月24日 17:49