Проблемы с компиляцией кода 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 

Пожалуйста, дайте мне посмотреть, как эта проблема может быть исправлена.

Прокомментируйте строку в setup.py , в которой 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 / INCREMENTAL: NO / 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: warning LNK4197: экспортировать ‘initutilFunctions_C’ указанное количество раз; используя первую спецификацию Создание библиотеки build \ temp.win-amd64-2.7 \ Release \ utilFunctions_C.lib и obj ect build \ 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)] )