<p>问题:为什么dllwrap会在pip中给出这个错误?</p>
<pre><code>_foo.exp: file not recognized: File format not recognized
</code></pre>
<p>简而言之:检查你的路径。MinGW\bin需要在它的开始附近。</p>
<p>长话短说:有一段时间我在利用一个工作。我从pip.log中获取dllwrap命令并直接执行它。它构建了.pyd并使pip安装能够完成任务。</p>
<p>我将--verbose标志传递到这两种调用dllwrap的不同方法中。在皮普的领导下,这件事已经完成了。</p>
<pre><code>dlltool: Opened temporary file: dumlc.s
dlltool: run: as -o _bcrypt.exp dumlc.s
dlltool: Generated exports file
</code></pre>
<p>从命令行调用dllwrap得到了这个结果。</p>
<pre><code>C:\MinGW\bin\dlltool: Opened temporary file: demmc.s
C:\MinGW\bin\dlltool: run: C:\MinGW\bin\as -o _bcrypt.exp demmc.s
C:\MinGW\bin\dlltool: Generated exports file
</code></pre>
<p>我的计算机运行的是64位的Windows7,但使用的是32位的Python2.7。它是新的,但似乎已经预装了AMD应用程序SDK。它有一个默认为64位输出的as.exe。</p>
<p>我的修复方法是编辑路径,使C:\ MinGW\bin领先于C:\程序文件(x86)\ AMD APP\bin\x86\u 64</p>
<p>这个问题可以在Python代码中得到更可靠的解决,尽管我还没有确定在virtualenv、pip或distutils中应该做什么。</p>
<p>使用MinGW构建扩展还需要另外两件事,我将在这里简单地重复一下。</p>
<h2>配置distutils以使用MinGW编译器</h2>
<p>这可以在各种文件或命令行开关中完成。我在主目录中选择了一个文件。</p>
<pre><code>$ cat ~/pydistutils.cfg
[build]
compiler = mingw32
</code></pre>
<h2>消除-mno cygwin开关的补丁程序</h2>
<p>作为管理员编辑Lib/distutils/cygwinccompiler.py。删除四个-mno cygwin选项。</p>
<pre><code>s/ -mno-cygwin//
</code></pre>
<p>-mno cygwin在gcc中已被弃用一段时间,现在是一个错误。</p>
<p>见<a href="http://bugs.python.org/issue12641" rel="nofollow">http://bugs.python.org/issue12641</a></p>