在Python中编译C代码的问题

时间:2015-10-11 08:26:56

标签: python c visual-studio-2010 compilation

我在Windows 7中使用Anaconda for Python 2.7.10,64位。我也使用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

请让我看看如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

评论setup.py中代表libraries=['m']的行,然后再次运行。

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

答案 1 :(得分:0)

如果我只评论

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   建立\ temp.win-amd64-2.7 \发布\ cutilFunctions.obj   / OUT:C:\蟒蛇\短信工具   S-主\ SOFTWARE \型号\ utilFunctions_C \ utilFunctions_C.pyd   / IMPLIB:构建\ TEMP。双赢amd64-2.7 \发布\ 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   建立\ temp.win-amd64-2.7 \发布\ utilFunctions_C.exp

我认为问题现在已经解决了。谢谢LPs !!

答案 2 :(得分:0)

从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)]

  )