也许我应该把它分成单独的问题,但是在尝试了所有这些之后,我想知道它们是否都不是相互关联的。
这是背景故事: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环境也不是很了解,所以我最终放弃了实验,决定在这里问。
问题:
我拥有的 C 库是静态的。那样可以么?我可以只使用 swig 生成的包装文件并将其链接到静态库以创建动态库(用于 Python)吗?如果答案是否定的,这实际上可能会变得复杂。基本上,我想公开一个特定库的 API(称之为“A”)。反过来,该库依赖于“L”、“C”和“D”。我可以访问“A”和“L”的源代码,所以我可以随意编译它们,但是“C”和“D”不在我的控制范围内——它们是静态库。
在 Windows 中,为了与 Python 一起使用,我想要的输出文件到底是什么?一个DLL?它应该有一个 .pyd 扩展名吗?我熟悉 Linux 中的所有这些(过去使用过 Cython),但在 Windows 中不熟悉。
我真的很想在 Visual Studio 2010 中处理这个问题的帮助。文档涵盖了 Visual Studio 6 和上面的几个版本,但细节相对稀疏。相反,他们建议我只使用 SWIG 附带的 .dsp/.dsw 文件。我确实尝试过使用它附带的一个简单示例。VS2010 将 dsp/dsw 文件转换为 VS2010 格式,一切正常 - 创建一个 .pyd 文件。但是,当我进入项目/解决方案的属性时,我看不到swig 的设置,也没有看到带有 .pyd 扩展名的设置!自定义/构建后设置为空!我怀疑当 VS2010 将项目文件转换为它的格式时,它会处理所有的构建后设置,但不会显示它们。
非常感谢!