zoukankan      html  css  js  c++  java
  • SWIG 基本概念和入门

    C 和 C++ 被公认为(理当如此)创建高性能代码的首选平台。对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。本文使用 Ruby 作为公开 C/C++ 功能的首选脚本接口。要理解本文,您必须具备 C/C++ 与 Ruby 方面的相应知识。

    SWIG 是一款不错的工具,可适合多种场景,其中包括:

    • 向 C/C++ 代码提供一个脚本接口,使用户更容易使用
    • 向您的 Ruby 代码添加扩展或将现有的模块替换为高性能的替代模块
    • 提供使用脚本环境对代码执行单元和集成测试的能力
    • 使用 TK 开发一个图形用户接口并将它与 C/C++ 后端集成

    此外,与 GNU Debugger 每次都需触发相比,SWIG 要容易调试得多。

    使用 SWIG 编写 Hello World

    作为输入,SWIG 需要一个包含 ANSI C/C++ 声明和 SWIG 指令的文件。我将此输入文件称为 SWIG 接口文件。一定要记住,SWIG 仅需要足够生成包装器代码的信息。该接口文件通常具有 *.i 或 *.swg 扩展名。以下是第一个扩展文件 test.i:

    1
    2
    %module test
    %constant char* Text = "Hello World with SWIG"

    使用 SWIG 运行此代码:

    1
    swig –ruby test.i

    第二个代码段中的命令行在当前文件夹中生成一个名为 test_wrap.c 的文件。现在,您需要在此 C 文件中创建一个共享库。以下是该命令行:

    1
    2
    bash$ gcc –fPIC –c test_wrap.c –I$RUBY_INCLUDE
    bash$ gcc –shared test_wrap.o –o test_wrap.so –lruby –L$RUBY_LIB

    就这么简单。您已准备就绪,那就触发交互式 Ruby shell (IRB),输入 require 'test_wrap' 来检查 Ruby Test 模块和它的内容。以下是扩展的 Ruby 端:

    1
    2
    3
    4
    5
    6
    irb(main):001:0> require 'test_wrap'
    => true
    irb(main):002:0> Test.constants
    => ["Text"]
    irb(main):003:0> Test:: Text
    => "Hello World with SWIG"

    SWIG 可用于生成各种语言扩展,只需运行 swig –help 检查所有的可用选项。对于 Ruby,可以输入 swig –ruby <interface file>;对于 Perl,可以使用 swig –perl <interface file>

    也可以使用 SWIG 生成 C++ 代码:只需在命令行使用 –c++ 即可。在前面的示例中,运行 swig –c++ –ruby test.i 会在当前文件夹中生成一个名为 test_wrap.cxx 的文件。

     

    参考文档:https://www.ibm.com/developerworks/cn/aix/library/au-swig/

  • 相关阅读:
    Java文件的 In 与 Out 的相对性
    EBS 生产环境并发管理器重启步骤详解经验啊
    HDOJ1285 确定比赛名次(拓扑排序)
    对线性回归、逻辑回归、各种回归的概念学习
    一个截屏工具制作的全过程记录——如何使用“拿来主义”
    免费的响应式bootstrap管理员后台界面主题 Charisma
    挖掘管理价值:企业软件项目管理实战
    浏览器自动填充表单导致网页样式丢失
    「译」开发者如何提升和推销自己
    xcopy的一次误用及解决办法
  • 原文地址:https://www.cnblogs.com/dylancao/p/9661163.html
Copyright © 2011-2022 走看看