编译Cython代码时遇到的问题: fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

使用python setup.py build_ext --inplace命令编译cython代码, 出现以下错误: 

Compiling cython_example.pyx because it changed.
[1/1] Cythonizing cython_example.pyx
D:python_virtualenvigdatalibsite-packagesCythonCompilerMain.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in
a later release! File: D:学习igdatalearncython_testcython_example.pyx
tree = Parsing.p_module(s, pxd, full_module_name)
running build_ext
building 'cython_test.cython_example' extension
creating build
creating build	emp.win-amd64-3.6
creating build	emp.win-amd64-3.6Release
C:Program Files (x86)Microsoft Visual Studio 14.0VCincl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-Id:program filespython361include" "-Id:program filespython361includ
e" "-IC:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDE" "-IC:Program Files (x86)Windows Kits10include10.0.10240.0ucrt" "-IC:Program Files (x86)Windows Kits
8.1includeshared" "-IC:Program Files (x86)Windows Kits8.1includeum" "-IC:Program Files (x86)Windows Kits8.1includewinrt" /Tccython_example.c /Fobuild	emp.win-amd64
-3.6Releasecython_example.obj
cython_example.c
creating D:学习igdatalearncython_testcython_test
C:Program Files (x86)Microsoft Visual Studio 14.0VCinlink.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:d:program filespython361
Libs" /LIBPATH:D:python_virtualenvigdatalibs /LIBPATH:D:python_virtualenvigdataPCbuildamd64 "/LIBPATH:C:Program Files (x86)Microsoft Visual Studio 14.0VCLIBamd64"
"/LIBPATH:C:Program Files (x86)Windows Kits10lib10.0.10240.0ucrtx64" "/LIBPATH:C:Program Files (x86)Windows Kits8.1libwinv6.3umx64" /EXPORT:PyInit_cython_example b
uild	emp.win-amd64-3.6Releasecython_example.obj /OUT:D:学习igdatalearncython_testcython_testcython_example.cp36-win_amd64.pyd /IMPLIB:build	emp.win-amd64-3.6Releasec
ython_example.cp36-win_amd64.lib
python36.lib(python36.dll) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\link.exe' failed with exit status 1112

解决:

  报错的意思是系统环境是64位windows系统,使用的C编译工具却是32位的。
  windows系统中'x86'表示32位。
  上面这个错的主要问题是使用的link.exe是32位的,只要改成64位的link.exe就没有问题了。
  

  环境: windows64位, python 64位, python3.6.1
  第一步:
    找到windows的系统环境变量path:
    将"C:Program Files (x86)Microsoft Visual Studio 14.0VCinamd64;" 加在path最前面,这样就可以优先使用64位的link.exe。
  第二步:
    新建一个Dos窗口, 执行 "echo %PATH%" ,使环境变量立即生效。(在前面建好的DOS窗口下执行没有用)

  第三步:
    如果是在pycharm的Terminal中执行的 python setup.py build_ext --inplace命令,还需要先重启pycharm,再在其中执行编译命令才会有效。

    DOS的话新建一个DOS窗口即可。

解决了上面这个问题,又出现了一个新问题:

running build_ext
building 'cython_test.cython_example' extension
C:Program Files (x86)Microsoft Visual Studio 14.0VCinamd64cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-Id:program filespython361include" "-Id:program filespython361include" "-IC:Program Files (x86)Microsoft Visual
Studio 14.0VCINCLUDE" "-IC:Program Files (x86)Windows Kits10include10.0.10240.0ucrt" "-IC:Program Files (x86)Windows Kits8.1includeshared" "-IC:Program Files (x86)Windows Kits8.1includeum" "-IC:Program Files (x
86)Windows Kits8.1includewinrt" /Tccython_example.c /Fobuild	emp.win-amd64-3.6Releasecython_example.obj
cython_example.c
C:Program Files (x86)Microsoft Visual Studio 14.0VCinamd64link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:d:program filespython361Libs" /LIBPATH:D:python_virtualenvigdatali
bs /LIBPATH:D:python_virtualenvigdataPCbuildamd64 "/LIBPATH:C:Program Files (x86)Microsoft Visual Studio 14.0VCLIBamd64" "/LIBPATH:C:Program Files (x86)Windows Kits10lib10.0.10240.0ucrtx64" "/LIBPATH:C:Program F
iles (x86)Windows Kits8.1libwinv6.3umx64" /EXPORT:PyInit_cython_example build	emp.win-amd64-3.6Releasecython_example.obj /OUT:D:学习igdatalearncython_testcython_testcython_example.cp36-win_amd64.pyd /IMPLIB:build	
emp.win-amd64-3.6Releasecython_example.cp36-win_amd64.lib
cython_example.obj : warning LNK4197: export 'PyInit_cython_example' specified multiple times; using first specification
   Creating library build	emp.win-amd64-3.6Releasecython_example.cp36-win_amd64.lib and object build	emp.win-amd64-3.6Releasecython_example.cp36-win_amd64.exp
Generating code
Finished generating code
LINK : fatal error LNK1158: cannot run 'rc.exe'
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\link.exe' failed with exit status 1158 

解决:
  错误的意思是缺少rc.exe文件,这个文件在C:Program Files (x86)Windows Kits8.1inx64下,只需要将该目录下的 rc.exe 和 rcdll.dll拷贝一份粘贴到link.exe所在目录C:Program Files (x86)Microsoft Visual Studio 14.0VCinamd64下即可。

  如果是32位系统,则是将C:Program Files (x86)Windows Kits8.1inx86下的rc.exe和rcdll.dll粘贴到C:Program Files (x86)Microsoft Visual Studio 14.0VCin下。

原文地址:https://www.cnblogs.com/hufulinblog/p/10368722.html