22

几周以来,我一直在尝试让 Microsoft Visual Studio 2010 使用 SWIG 为我创建一个 DLL。如果你已经经历过这个过程,你会不会好心给一个深思熟虑的一步一步的过程解释?我在网上到处找,花了很多时间尝试这样做;但是我发现的所有教程都已过时或解释不清。

我已经用 cygwin 成功地完成了这个过程;但正如你们中的一些人所知,cygwin DLL 不是很实用。

结果,我有 .i、.cpp 和 .h 文件,我知道它们可以一起创建一个 DLL。我只需要知道如何使用 Visual Studio C++ 2010 做到这一点。我的目标语言是 Python。

4

1 回答 1

55

分步说明。这假设您拥有源代码并且正在构建一个将源代码直接链接到其中的单个 DLL 扩展。创建一个工作项目后我没有回顾它,所以我可能错过了一些东西。如果您卡在某个步骤上,请评论此帖子。如果您有一个现有的 DLL 并希望创建一个包装它的 Python 扩展 DLL,则此步骤略有不同。如果您在这篇文章的评论方面需要帮助,我会扩展它。

编辑 8/19/2012:如果从 C 示例开始,请不要-c++在步骤 13 中使用,而是在步骤 14 和 19 中使用.c而不是.cxx包装文件扩展名。

  1. 启动 Visual Studio 2010
  2. 现有代码中的文件、新建、项目...
  3. 选择“Visual C++”项目类型并单击下一步。
  4. 输入 .cpp/.h/.i 文件所在的项目文件位置。
  5. 对于项目名称,选择 .i 文件中 %module 语句中使用的名称(大小写很重要)。
  6. 选择项目类型“动态链接库 (DLL) 项目”,然后单击“下一步”。
  7. 将 Python.h 文件的路径添加到包含搜索路径,通常类似于“C:\Python27\include”,然后单击下一步。
  8. 单击完成。
  9. 右键单击解决方案资源管理器中的项目,添加,现有项...,然后选择您的 .i 文件。
  10. 右键单击 .i 文件,属性,然后选择配置“所有配置”。
  11. 将项目类型更改为“自定义构建工具”,然后单击应用。
  12. 在属性中选择“自定义构建工具”(它会出现在上面的应用之后)。
  13. 输入“swig -c++ -python -outdir $(Outdir) %(Identity)”的命令行(假设 SWIG 在您的路径中,并根据需要将生成的 .py 文件重定向到 Debug 或 Release 目录)。
  14. 在输出中输入“%(Filename)_wrap.cxx;$(Outdir)%(Filename).py”。
  15. 单击确定。
  16. 右键单击 .i 文件,然后选择编译。
  17. 右键单击项目,添加,新建过滤器,将其命名为“生成的文件”。
  18. 右键单击“Generated Files”,单击“Properties”,然后将“SCC Files”设置为“False”(如果您使用源代码控制,这会阻止 VS2010 尝试在此过滤器中检入生成的文件)。
  19. 右击“Generated Files”,Add,Exiting Item,选择编译生成的_wrap.cxx文件。
  20. 右键单击项目,属性。
  21. 选择配置“所有配置”。
  22. 选择配置属性、链接器、常规、附加库目录并添加 python 库的路径,通常是“C:\Python27\libs”。
  23. 选择 Configuration Properties、General 并将 TargetName 设置为“_$(ProjectName)”。
  24. 将目标扩展名设置为“.pyd”。
  25. 构建项目的“发布”版本。除非您构建 Python 本身的调试版本,否则您无法构建调试版本。
  26. 打开一个控制台,进入项目的Release目录,运行python,导入你的模块,调用一个函数!
于 2012-07-31T03:20:04.867 回答