在Python中编译C代码的问题

我在Windows 7,64位中使用Anaconda for Python 2.7.10。 我也使用Visual Studio 2010.我安装了Microsoft Visual Studio for Python。

当我尝试在python中编译C代码时(在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中表示libraries=['m'] ,然后再次运行。

链接到m的需要可能是链接数学库的GCC,它是由Windows环境中的MSVCR管理的。

如果我只评论

 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:警告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!

从ext_modules中删除.. libraries=['m'] ..帮助我在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)] )