使用cython | LINK生成错误:致命错误LNK181

2024-04-20 01:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

因此,我想使用cython来包装C/C++文件。我正在使用Windows 10和基于x64的操作系统、Visual studio 2017和anaconda3来执行我的所有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

然而,我得到一个致命的链接错误LNK181。错误预览可在此处找到:

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”文件夹中没有这样的文件“Files.obj”

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


Tags: 文件clwindowssetuplinefilesdmwin
1条回答
网友
1楼 · 发布于 2024-04-20 01:41:04

我已经找到了问题的答案。我做了一些尝试错误,但我不知道为什么它应该这样工作。不过,我们欢迎对这个问题提出有价值的建议以及专家们的回答。因此,我做了以下工作:

我将setup.py文件移到了“DM files”文件夹中,该文件夹包含所有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\u 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>

相关问题 更多 >