【问题标题】:Cython: LINK : fatal error LNK1104: cannot open file 'atls.lib'Cython:链接:致命错误 LNK1104:无法打开文件“atls.lib”
【发布时间】:2016-05-14 19:13:06
【问题描述】:

我在 cython 项目中链接 atl 库时遇到问题。 我目前安装了 Visual C++ 9.0 和 Visual Studio 2008 以及 SP1 和 Visual Studio 2015。

当我使用完整路径链接库时,我使用 VS2015 使用 python 3.5 构建成功。 在与Visual C++ 9.0 链接的python 2.7 中,找到了头文件但无法链接库。

我知道该库已在新版本中移至 .h 文件,因此可能难以重现。 我正在使用这个setup.py

# Cython compile instructions

from Cython.Build import cythonize
try:
    from setuptools import setup
    from setuptools import Extension
except ImportError:
    print("using distutils")
    from distutils.core import setup
    from distutils.extension import Extension
# Use python setup.py build_ext --inplace
# to compile
vs27 = ['C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\lib',
        'C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\include',
        'C:\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\atlmfc\\src\\atl\\atls',
]
vs35 = ['C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\atlmfc\\include',
        'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\atlmfc\\lib',
        'C:\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\atlmfc\\src\\atl\\atls',]
extensions = [Extension("access", ["access.pyx"], include_dirs=vs27)]
setup(
    name = "access",
    ext_modules = cythonize(extensions),
    include_dirs = vs27,
)

当我使用 python 2.7 和 Visual C++ 9.0 编译时,我得到:

running build_ext
building 'access' extension
C:\Users\tboquet.R2000\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\\Program -IFiles -I(x86)\\Microsoft -IVisual -IStudio -I9.0\\VC\\atlmfc\\lib "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\src\atl\atls" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\src\atl\atls" -IC:\Anaconda3\envs\anapy27\include -IC:\Anaconda3\envs\anapy27\PC /Tpaccess.cpp /Fobuild\temp.win-amd64-2.7\Release\access.obj
access.cpp
C:\Users\tboquet.R2000\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Include\xlocale(342) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
C:\Users\tboquet.R2000\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\\Program -IFiles -I(x86)\\Microsoft -IVisual -IStudio -I9.0\\VC\\atlmfc\\lib "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\src\atl\atls" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib" "-IC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\src\atl\atls" -IC:\Anaconda3\envs\anapy27\include -IC:\Anaconda3\envs\anapy27\PC /Tpdbaccessor.cpp /Fobuild\temp.win-amd64-2.7\Release\dbaccessor.obj
dbaccessor.cpp
C:\Users\tboquet.R2000\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Include\xlocale(342) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
dbaccessor.cpp(111) : warning C4267: 'argument' : conversion from 'size_t' to 'UINT', possible loss of data
c:\users\tboquet.r2000\documents\visual studio 2013\projects\accessor\accessor\dbaccessor.cpp(220) : warning C4715: 'dbaccessor::connect' : not all control paths return a value
C:\Users\tboquet.R2000\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Anaconda3\envs\anapy27\libs /LIBPATH:C:\Anaconda3\envs\anapy27\PCbuild\amd64 /EXPORT:initaccess build\temp.win-amd64-2.7\Release\access.obj build\temp.win-amd64-2.7\Release\dbaccessor.obj /OUT:build\lib.win-amd64-2.7\access.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\access.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\access.pyd.manifest
LINK : fatal error LNK1104: cannot open file 'atls.lib'
error: command 'C:\\Users\\tboquet.R2000\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\link.exe' failed with exit status 1104

我是否必须使用其他方式链接库,或者是否有任何解决此错误的方法?

【问题讨论】:

    标签: python c++ cython setuptools


    【解决方案1】:

    我能够解决问题,但不是以最优雅的方式。问题是链接器无权访问该库,因为没有声明 /LIBPATH 可以找到它。

    可以将库复制到linker.exe 使用的/LIBPATH 之一。我把它放在C:\Anaconda3\envs\anapy27\libs 中,我能够编译包并加载.pyd

    解决问题的更好方法是指示 setuptools 考虑它(在最后一个命令中添加正确的 /LIBPATH,就像前面的命令一样)。我不确定这是否是 setuptools 中的错误,或者是否存在相关参数。

    如果有人对此有更好的答案,请对此发表评论,我会更新它!

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2011-06-23
      • 2017-11-29
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多