3

也许我应该把它分成单独的问题,但是在尝试了所有这些之后,我想知道它们是否都不是相互关联的。

这是背景故事:Linux 和 Windows 中都有一些 C 库。有人在 Linux 中使用 swig 将 C 库的 API 暴露给 Python。他或多或少地为 swig 编写了一个构建脚本(.i 文件),swig 创建了一个包装 C 文件,他使用 gcc 编译该 C 文件,链接到原始库以获取 Python 模块。

现在我接到了他的工作,并要求我为 Windows 库做这件事。希望我能找到一种快速的方法来使用他的 .i 文件为 Windows 创建一个。我们使用 Visual Studio 2010。

我对swig了解不多,对C或Visual Studio环境也不是很了解,所以我最终放弃了实验,决定在这里问。

问题:

  1. 我拥有的 C 库是静态的。那样可以么?我可以只使用 swig 生成的包装文件并将其链接到静态库以创建动态库(用于 Python)吗?如果答案是否定的,这实际上可能会变得复杂。基本上,我想公开一个特定库的 API(称之为“A”)。反过来,该库依赖于“L”、“C”和“D”。我可以访问“A”和“L”的源代码,所以我可以随意编译它们,但是“C”和“D”不在我的控制范围内——它们是静态库。

  2. 在 Windows 中,为了与 Python 一起使用,我想要的输出文件到底是什么?一个DLL?它应该有一个 .pyd 扩展名吗?我熟悉 Linux 中的所有这些(过去使用过 Cython),但在 Windows 中不熟悉。

  3. 真的很想在 Visual Studio 2010 中处理这个问题的帮助。文档涵盖了 Visual Studio 6 和上面的几个版本,但细节相对稀疏。相反,他们建议我只使用 SWIG 附带的 .dsp/.dsw 文件。我确实尝试过使用它附带的一个简单示例。VS2010 将 dsp/dsw 文件转换为 VS2010 格式,一切正常 - 创建一个 .pyd 文件。但是,当我进入项目/解决方案的属性时,我看不到swig 的设置,也没有看到带有 .pyd 扩展名的设置!自定义/构建后设置为空!我怀疑当 VS2010 将项目文件转换为它的格式时,它会处理所有的构建后设置,但不会显示它们。

非常感谢!

4

1 回答 1

1
  1. 这不应该有任何问题。只需在 VS 中添加“L”、“C”和“D”库,就像您通常添加外部库一样。

  2. 是的。目标应该是动态库(.dll),但输出文件应该重命名为 _something.pyd(参见下面的链接如何配置项目)

  3. SWIG 可以集成到 VS 解决方案构建工具链中。前段时间我写了一本关于如何使用 SWIG 和 Visual Studio 的手册,现在为你更新了:

如何在 Visual Studio 2010 中使用 SWIG

于 2012-07-23T04:23:15.943 回答