Проблемы с компиляцией кода C в Python
Я использую Anaconda для Python 2.7.10 в Windows 7, 64 бит. Я также использую Visual Studio 2010. Я установил Microsoft Visual Studio для Python.
Когда я пытаюсь скомпилировать код C в Python (внутри cmd):
C:\Anaconda\sms-tools-master\software\transformations_interface>python compileModule.py build_ext --inplace
Я получаю много предупреждений и ошибок, заключительная часть которых выглядит следующим образом:
C:\Program Files (x86)\Microsoft Visual Studio
10.0\VC\BIN\amd64\link.exe /DLL / nologo /INCREMENTAL:NO /LIBPATH:C:\Anaconda\libs /LIBPATH:C:\Anaconda\PCbuild\am d64 m.lib
/EXPORT:initutilFunctions_C build\temp.win-amd64-2.7\Release\utilFunct
ions.obj build\temp.win-amd64-2.7\Release\cutilFunctions.obj
/OUT:C:\Anaconda\sm
s-tools-master\software\models\utilFunctions_C\utilFunctions_C.pyd
/IMPLIB:build \temp.win-amd64-2.7\Release\utilFunctions_C.lib
/MANIFESTFILE:build\temp.win-amd
64-2.7\Release\utilFunctions_C.pyd.manifest LINK : fatal error
LNK1181: cannot open input file 'm.lib' error: command 'C:\\Program
Files (x86)\\Microsoft Visual Studio 10.0\\VC\\BIN\\ amd64\\link.exe'
failed with exit status 1181
Пожалуйста, дайте мне посмотреть, как можно решить эту проблему.
3 ответа
Прокомментируйте строку в setup.py
что сказать libraries=['m']
и запустить снова.
Необходимость ссылки на m может быть GCC, чтобы связать библиотеку Math, которая управляется MSVCR в среде Windows.
И если бы я только прокомментировать
libraries=['m']
и использовать
ext_modules = [Extension("utilFunctions_C",sourcefiles, include_dirs=py_inc + np_inc)]
тогда я получаю много предупреждений (не об ошибках, надеюсь), заключительная часть которых:
C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ BIN \ amd64 \ link.exe / DLL / nologo / ДОПОЛНИТЕЛЬНО: НЕТ /LIBPATH:C:\Anaconda\libs /LIBPATH:C:\Anaconda\PCbuild\am d64 /EXPORT:initutilFunctions_C build\temp.win-amd64-2.7\Release\utilFunctions.o bj build\temp.win-amd64-2.7\Release\cutilFunctions.obj /OUT:C:\Anaconda\sms-tool s-master\software\models\utilFunctions_C\utilFunctions_C.pyd /IMPLIB:build\temp. win-amd64-2.7\Release\utilFunctions_C.lib /MANIFESTFILE:build\temp.win-amd64-2.7 \Release\utilFunctions_C.pyd.manifest cutilFunctions.obj: предупреждение LNK4197: экспорт 'initutilFunctions_C' задан несколько раз; использование первой спецификации Создание библиотеки build \ temp.win-amd64-2.7 \ Release \ utilFunctions_C.lib и сборка объекта \temp.win-amd64-2.7\Release\utilFunctions_C.exp
Я думаю, что проблема сейчас решена. Спасибо, LP!
Просто удаляю.. libraries=['m']
.. из ext_modules помогли мне скомпилировать на Windows 2010 тоже. Нет ошибок или предупреждений. Вот как это выглядит в конце концов,
ext_modules = [Extension("utilFunctions_C",sourcefiles , include_dirs=py_inc + np_inc)]
Огромное спасибо
Редактировать.....
Вот весь код для compileModule.py
Пожалуйста, обратитесь к комментариям для деталей.
from distutils.core import setup, Extension
from distutils.sysconfig import *
from distutils.util import *
from Cython.Distutils import build_ext
import numpy
import os
import os.path
#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
try:
from distutils.command.build_py import build_py_2to3 \
as build_py
except ImportError:
from distutils.command.build_py import build_py
try:
from Cython.Distutils import build_ext
except ImportError:
use_cython = False
else:
use_cython = True
py_inc = [get_python_inc()]
np_lib = os.path.dirname(numpy.__file__)
np_inc = [os.path.join(np_lib, 'core/include')]
ext_inc = os
sourcefiles = ["utilFunctions.c", "cutilFunctions.pyx"]
setup(
cmdclass = {'build_ext': build_ext},
#ext_modules = [Extension("utilFunctions_C",sourcefiles, libraries=['m'], include_dirs=py_inc + np_inc)]
ext_modules = [Extension("utilFunctions_C",sourcefiles , include_dirs=py_inc + np_inc)]
)