如何使用Visual Studio 2010从SWIG创建DLL

22

我已经尝试了好几周,希望使用 SWIG 在 Microsoft Visual Studio 2010 中为自己创建一个 DLL。如果您已经完成此过程,能否友善地给出一步一步的详细说明?我已经在网上到处寻找,并花费了很多时间来尝试这样做;但是我发现所有找到的教程都已经过时或解释得不好。

我已经成功地通过 cygwin 完成了此过程;但是正如一些人所知,一个 cygwin DLL 并不是非常实用。

因此,我有 .i、.cpp 和 .h 文件,我知道它们可以一起创建一个 DLL。我只需要知道如何在 Visual Studio C++ 2010 中完成此操作。我所针对的语言是 Python。

1个回答

55

逐步说明。这假设您拥有源代码并构建单个DLL扩展,将源代码直接链接到其中。在创建工作项目后,我没有回头再看一遍,所以可能会漏掉某些内容。如果您卡在某个步骤上,请在此帖子上发表评论。如果您拥有现有的DLL,并想创建一个包装它的Python扩展DLL,则这些步骤略有不同。如果需要帮助,请在此帖子上发表评论,我将对其进行扩展。

编辑于8/19/2012:如果从C示例开始,请勿在第13步中使用-c ++ ,并在第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 文件,然后选择编译。
  • 右键单击项目,选择添加、新建筛选器,将其命名为“生成的文件”。
  • 右键单击“生成的文件”,选择属性,并将“SCC Files”设置为“False”(如果您使用源代码控制,则可以防止VS2010尝试在此筛选器中检查生成的文件)。
  • 右键单击“生成的文件”,选择添加、现有项,然后选择编译生成的_wrap.cxx文件。
  • 右键单击项目,选择属性。
  • 选择“所有配置”。
  • 选择配置属性、链接器、常规、附加库目录,并添加到Python库的路径,通常是“C:\Python27\libs”。
  • 选择配置属性、常规,将TargetName设置为“_$(ProjectName)”。
  • 将Target Extension设置为“.pyd”。
  • 构建项目的“Release”版本。除非您构建了Python本身的调试版本,否则无法构建Debug版本。
  • 打开一个控制台,进入项目的Release目录,运行Python,导入您的模块,并调用函数!

  • 1
    @Mark - 很棒的帖子,您可以扩展一下,考虑到某人已经有一个现有的DLL吗? - Shmil The Cat
    值得注意的是,SWIG 不支持 Python 的 64 位版本。请使用 32 位版本。 - odedfos
    1
    @odedfos 不是这样的。它在64位系统上也能很好地工作。这是我主要使用它的方式。任何被包装的DLL也必须是64位的。 - Mark Tolonen
    如果你的Python安装是32位的,那么你必须使用32位的配置。同样地,如果是64位的,就必须使用64位的配置。你不能混用它们,否则会出现未解决的外部符号。 - delrocco
    2
    对于Visual Studio 2017,.i文件没有右键“编译”选项。请注意,您不必从Visual Studio进行任何自定义编译.i文件的操作。您只需先从shell调用swig,然后手动将生成的_wrap.c/.cpp添加到Visual Studio项目中即可。 - delrocco
    显示剩余2条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接