【问题标题】:How to create a DLL with SWIG from Visual Studio 2010如何在 Visual Studio 2010 中使用 SWIG 创建 DLL
【发布时间】:2012-07-26 10:35:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ python visual-studio-2010 swig


    【解决方案1】:

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

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

    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. 在 Properties 中选择“Custom Build Tool”(它会出现在上面的 Apply 之后)。
    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. 选择配置属性、常规并将 TargetName 设置为“_$(ProjectName)”。
    24. 将目标扩展名设置为“.pyd”。
    25. 构建项目的“发布”版本。除非您构建 Python 本身的调试版本,否则您无法构建调试版本。
    26. 打开控制台,进入项目的Release目录,运行python,导入你的模块,调用函数!

    【讨论】:

    • 感谢 Mark 为我(可能还有很多其他人)省去了通过反复试验找到这个过程的麻烦!我必须将我的 C:\Python27\include; 添加到“项目属性 >> VC++ 目录 >> 包含目录”中。但除此之外,它就像做梦一样!顺便说一句,我使用的是 Microsoft Visual C++ Express;但过程显然是一样的。
    • @Mark - 很棒的帖子,你能把它扩展到有一个现有 DLL 的情况吗?
    • 值得注意的是 SWIG 不适用于 python 64 位版本。请改用 32 位版本。
    • @odedfos 不正确。它适用于 64 位。这是我使用它的主要方式。任何被包装的 DLL 也必须是 64 位的。
    • 对于 Visual Studio 2017,.i 文件没有右键单击“编译”选项。请注意,您不必从 Visual Studio 对 .i 文件进行任何自定义编译。您可以先从 shell 调用 swig,然后手动将生成的 _wrap.c/.cpp 添加到您的 Visual Studio 项目中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多