【问题标题】:Build error using cython | LINK : fatal error LNK1181使用 cython 构建错误 |链接:致命错误 LNK1181
【发布时间】:2021-04-01 17:10:24
【问题描述】:

我正在使用 anaconda3 shell 来执行 cython 脚本,以便以后可以使用 Python 来调用我的函数。我有来自出版商的源代码,它是用 C/C++ 编写的,没有任何 C/C++ 编程经验。

因此,我想使用 cython 来包装 C/c++ 文件。我正在使用带有基于 x64 的操作系统、Visual Studio 2017 和 anaconda3 的 Windows 10 来执行我的所有 python 模块。

我的 setup.py 文件如下所示:

#setup.py
from setuptools import setup,Extension
from Cython.Build import cythonize

extensions=[Extension("IrisAO_Python", [".\\DM files\\IrisAO_Python.pyx"],
                      include_dirs = [".\\DM files\\"],
                      library_dirs = [".\\DM files\\"],
                       libraries=["IrisAO.Devices"])]

setup(
    name = "irisao",
    ext_modules = cythonize(extensions),
    packages = ['DM files'],
    package_dir ={'DM files':'.\\DM files'},
    py_modules=['__init__','IrisAO_Python_MirrorControl'] 
)

我会敦促研究此问题的专家从我的 github 存储库中下载所有文件。不下载文件,问题的调试是没有用的。 :https://github.com/abani-nayak/IrisAO-for-Windows/tree/editing

接下来,我使用 anaconda3 shell 编译扩展 setup.py:

(base) C:\Users\Abani\Documents\DM setup\Final>python setup.py build_ext --inplace

但是,我收到了致命的链接错误 LNK1181。可以在这里找到错误的预览:

cl : Command line warning D9027 : source file 'Kits\10\include\10.0.17763.0\winrt -IC:\Program' ignored
cl : Command line warning D9024 : unrecognized source file type 'Files', object file assumed
cl : Command line warning D9027 : source file 'Files' ignored
cl : Command line warning D9024 : unrecognized source file type '(x86)\Windows', object file assumed
cl : Command line warning D9027 : source file '(x86)\Windows' ignored
cl : Command line warning D9027 : source file 'Kits\10\include\10.0.17763.0\cppwinrt /EHsc /TpraisePythonException.cpp /Fobuild\temp.win-amd64-3.8\Release\raisePythonException.obj' ignored
cl : Command line warning D9021 : no action performed
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:.\DM files\" /LIBPATH:C:\Users\Abani\anaconda3\libs /LIBPATH:C:\Users\Abani\anaconda3\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\um\x64" IrisAO.Devices.lib /EXPORT:PyInit_IrisAO_Python "build\temp.win-amd64-3.8\Release\.\DM files\IrisAO_Python.obj" build\temp.win-amd64-3.8\Release\raisePythonException.obj /OUT:build\lib.win-amd64-3.8\IrisAO_Python.cp38-win_amd64.pyd "/IMPLIB:build\temp.win-amd64-3.8\Release\.\DM files\IrisAO_Python.cp38-win_amd64.lib"
LINK : fatal error LNK1181: cannot open input file 'Files.obj'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\link.exe' failed with exit status 1181

(base) C:\Users\Abani\Documents\DM setup\Final>

错误提示:无法打开输入文件“Files.obj”。我不知道为什么它说无法打开输入文件,虽然我的 'DM 文件' 文件夹中没有这样的文件 'Files.obj'。

因此,我向专家寻求必要的帮助。再次,执行 cython 脚本所需的所有文件都可以在这里找到:https://github.com/abani-nayak/IrisAO-for-Windows/tree/editing

【问题讨论】:

  • 在“.\\DM 文件\\”中删除尾随 \\。它看起来好像在命令行中导致了“\”,这可能是一个问题。
  • @ead:由于我使用的是 Windows 操作系统,因此我无法将“.\\DM 文件”中的 \\ 放到 \ 中。 python中的'\'将其解释为特殊字符。但是,我找到了解决问题的方法,并在下面发布。

标签: python c++ visual-studio anaconda cython


【解决方案1】:

我找到了问题的答案。我做了一些试验错误,但我不知道为什么它应该这样工作。但是,欢迎对问题提出宝贵的建议以及专家的回答。因此,我做了以下事情:

我将 setup.py 文件移至我的“DM 文件”文件夹,该文件夹包含所有 c/c++ 文件。接下来,我像这样修改了 setup.py 文件:

#setup.py
from setuptools import setup,Extension
from Cython.Build import cythonize

extensions=[Extension("IrisAO_Python", ["IrisAO_Python.pyx"],
                      include_dirs = ["."],
                      library_dirs = ["."],
                       libraries=["IrisAO.Devices"])]

setup(
    name = "irisao",
    ext_modules = cythonize(extensions),
    packages = ['DM_files'],
    package_dir ={'DM_files':'.'},
    py_modules=['__init__','IrisAO_Python_MirrorControl'] 
)

我运行了在 anaconda3 中执行 setup.py 的常用命令:“python setup.py build_ext --inplace”。

命令执行没有任何错误。以下是预览:

creating C:\Users\Abani\Documents\DM setup\Final\DM_files\build\lib.win-amd64-3.8
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:. /LIBPATH:C:\Users\Abani\anaconda3\libs /LIBPATH:C:\Users\Abani\anaconda3\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\um\x64" IrisAO.Devices.lib /EXPORT:PyInit_IrisAO_Python build\temp.win-amd64-3.8\Release\IrisAO_Python.obj build\temp.win-amd64-3.8\Release\raisePythonException.obj /OUT:build\lib.win-amd64-3.8\IrisAO_Python.cp38-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.8\Release\IrisAO_Python.cp38-win_amd64.lib
   Creating library build\temp.win-amd64-3.8\Release\IrisAO_Python.cp38-win_amd64.lib and object build\temp.win-amd64-3.8\Release\IrisAO_Python.cp38-win_amd64.exp
Generating code
Finished generating code
copying build\lib.win-amd64-3.8\IrisAO_Python.cp38-win_amd64.pyd ->

(base) C:\Users\Abani\Documents\DM setup\Final\DM_files>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 2013-08-20
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多