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

标签 python dll swig

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

我的设置如下:

  • Windows 7 64 位
  • python 2.7.4
  • NumPy 1.7
  • 痛饮 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

我发现 Python lib 文件位于 C:Python27\libs\python27.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 中。

我是否缺少其他一些命令行参数来定位这些符号?

最佳答案

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

关于python - 未解析的外部符号构建 Python C 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024867/

相关文章:

python - Django 错误 : cannot open shared file

python - 在 Tkinter 中删除椭圆的轮廓?

Python 迭代/查找字典意外行为

c - 在 Release模式下延迟加载dll

java - 从 c/c++ 定义/实例化 java 对象

python - swig:扩展类模板以提供 __str__

python - python 中当前字符串如何作为对象属性?

Windows XP 上的 MySQL 连接器/c 版本 >=6

python - 为包含 Swig 对象的 Python 对象创建复制类方法

c++ - 带有CMake的Swig无法找到 header 包括