未解析的外部符号构建Python C扩展

时间:2014-06-03 21:02:36

标签: python dll swig

我目前正在尝试在Windows中构建C扩展程序。这些错误似乎与未找到标准相关。 python27.dll中的符号。如何解决这些缺失的符号?我是否需要以某种方式告诉编译器在哪里找到python27.dll或者我的python27.lib有问题?

我的设置如下:

  • Windows 7 64位
  • Python 2.7.4
  • Numpy 1.7
  • Swig 2.0.9
  • Visual studio 9.0

我发现此链接似乎存在相关问题,但我使用的内容版本不同:http://bugs.python.org/issue15772

我正在运行python setup.py build_ext --inplace来构建扩展程序。

setup.py如下所示:

try:
    numpy_include = numpy.get_include()
except AttributeError:
    numpy_include = numpy.get_numpy_include()

fmm3d_module = Extension('_fmm3d', sources=['fmm3d.i', 'fmm3d.c'],
                         include_dirs = [numpy_include])

一切编译好,然后运行以下链接命令:

C:\Program Files (x86)\Microsoft Visual Studio 9.\VC\BIN\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild\ amd64 /EXPORT:init_fmm3d build\temp.win-amd64-2.7\Release\fmm3d_wrap.obj build\temp.win-amd64-2.7\Release\fmm3d.obj /OUT:C:\Users\luke\Documents\Ranking\code\_fmm3d.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\_fmm3d.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\_fmm3d.pyd.manifest

我收到与Python符号相关的链接错误,如下所示:

fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyString_AsString referenced in function _SWIG_Python_str_AsChar
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyString_FromString referenced in function _SWIG_Python_str_FromChar
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyExc_RuntimeError referenced in function _SWIG_Python_ErrorType
fmm3d_wrap.obj : error LNK2019: unresolved external symbol __imp__PyExc_AttributeError referenced in function _SWIG_Python_ErrorType

我找到了位于C:Python27 \ libs \ python27.lib的Python lib文件。我假设这些符号应该在这里。实际上,看起来它们至少在此文件中被引用。例如,运行dumpbin -headers C:\Python27\libs\python27.lib会显示以下代码段:

  Version      : 0
  Machine      : 8664 (x64)
  TimeDateStamp: 5160619D Sat Apr 06 12:55:41 2013
  SizeOfData   : 0000001F
  DLL name     : python27.dll
  Symbol name  : PyString_AsString
  Type         : code
  Name type    : name
  Hint         : 629
  Name         : PyString_AsString

这让我相信python27.lib说pyString_AsString的引用包含在python27.dll中。

是否有一些其他命令行参数我找不到这些符号?

1 个答案:

答案 0 :(得分:8)

命令行上应该有一个python27.lib。你的dumpbin表明你的python是64位,可能你的VC ++编译器是32位。