2016-02-04 3 views
0

У меня возникли проблемы с связыванием библиотеки atl в моем проекте cython. В настоящее время у меня есть Visual C++ 9.0 и Visual Studio 2008 с пакетом обновления 1 (SP1) и Visual Studio 2015.Cython: LINK: фатальная ошибка LNK1104: невозможно открыть файл 'atls.lib'

Моя сборка успешно работает с python 3.5 с использованием VS2015 при связывании библиотек с использованием полного пути. В python 2.7, связанном с Visual C++ 9.0, заголовок найден, но библиотека не может быть связана.

Я знаю, что lib был перемещен в файл .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 

Должен ли я использовать другой способ связывания библиотеки или есть обходной путь относительно этой ошибки?

ответ

0

Я смог решить проблему, но не самым элегантным способом. Проблема в том, что компоновщик не имеет доступа к библиотеке, потому что не /LIBPATH, где он может найти его объявленным.

Возможно скопировать библиотеку в один из /LIBPATH, используемый linker.exe. Я положил его в C:\Anaconda3\envs\anapy27\libs, и я смог скомпилировать пакет и загрузить .pyd.

Лучшим способом решения проблемы было бы проинструктировать setuptools для его рассмотрения (добавление права /LIBPATH в последнюю команду, как в предыдущих командах). Я не уверен, что это ошибка в setuptools или если для этого существует аргумент.

Если у кого-то есть лучший ответ на этот вопрос, прокомментируйте это, и я обновлю его!

Смежные вопросы