Next 主题使用swig引擎,swig 是node端的一个优秀简洁的模板引擎,本文介绍swig基本语法。 特性 支持大多数主流浏览器。 表达式兼容性好。 面向对象的模板继承。 安装 $ npm install swig --save 基本用法 swig有多种实现方式来编译和渲染模板 var swig = require('swig'); // Compile a file ({ article: { title: 'Swig is fun!' 参考: https://www.jianshu.com/p/c5d333e6353c http://node-swig.github.io/swig-templates/docs/api/#CacheOptionshttp ://node-swig.github.io/swig-templates/docs/api/#CacheOptions
运行 SWIG 假设您像下面这样,定义了一个SWIG模块: %module example %{ #include "example.h" %} int gcd(int x, int y); extern double Foo; 要构建Javascript模块,请使用 -javascript 选项和所希望的目标引擎如:-jsc,-v8或-node 运行SWIG。 $ swig -javascript -jsc example.i 如果构建C ++扩展,请添加-c ++选项: $ swig -c++ -javascript -jsc example.i SWIG生成的 大于等于 4.3.0的 V8 API头定义了SWIG用于决定其正在编译的V8版本的常量。小于 4.3的版本,在运行 SWIG时,你要指定V8的版本。 例如: $ swig -c++ -javascript -v8 -DV8_VERSION=0x032530 example.i 如果你的目标 V8 版本直超过 4.3.0,你应该像下面这样运行 swig
本文作者:IMWeb json 原文出处:IMWeb社区 未经同意,禁止转载 swig的简单介绍 swig是JS模板引擎,它有如下特点: 根据路劲渲染页面 面向对象的模板继承,页面复用 动态页面 快速上手 功能强大 swig的使用 swig的变量 {{ foo.bar }} {{ foo['bar'] }} //如果变量未定义,输出空字符。 swig的标签 extends 使当前模板继承父模板,必须在文件最前 参数: file 父模板相对模板 root 的相对路径,将在后面介绍如何实现模板继承。 模板在fis3中的应用 swig的模板继承可以更好的帮我们组织代码结构,更好的复用代码。 在fis3构建中使用时,调用swig编译插件,将swig标签解析成正常的html文件即可。
swig 也是nodejs中一个优秀的模版引擎: http://paularmstrong.github.io/swig WebStorm中没有swig插件,我们可以用另一个插件“twig”替代, Paste_Image.png 这样,当新建.swig格式的文件,就会支持语法高亮了! ? Paste_Image.png
swig是一个可以把c/c++代码封装为python库的工具。 (本文封装为python3的库) 文章结构 整体看封装 只使用python提供的c语言接口(Python.h)封装一个简单的c函数 使用swig封装一个简单的c函数 使用swig封装一个简单的c++类 这个库很简单,会感觉这一步行是多余的,但用swig都有这一步。 swig封装c函数 首先实现功能(add.c、add.h)。 swig封装c++类 用c++实现一个向量类(Vector),两个文件——vector.hpp和vector.cpp。
swig可以自己包装c代码给其他语言使用,对应java就是包装为jni,这里简单描述各平台使用方法 1、ubuntu平台 git clone https://github.com/swig/swig.git cd swig/ . 42 and 105 is 21 Foo = 3.0 Foo = 3.1415926 2、win10平台+vs2015 2.1、下载 https://sourceforge.net/projects/swig example.dll 如果没有,就需要按下面的步骤操作: 2.4、自己编译example.dll cd D:\download\swigwin-3.0.12\Examples\java\callback swig ------------------------------- JavaCallback.run() Callback::~Callback() java exit 3、win10平台+mingw swig
swig简介 swig是个帮助将c、c++编写的程序与其他高级语言嵌入联接的开发工具。例如PHP、python、lua、c#、java等。 swig常将c、c++和其他语言进行API的相互转换。 swig下载 在SWIG内有swig各个release版本,适用于windows、mac系统。 swig使用 windows使用,常用于DLL。更多见官方文档(中文版)。 实例见我的小demo,git-swig-demo 1、创建一个export.i文件,置于资源文件内。 // export.i - SWIG interface %module pair %{ #include "pair.h" %} 3、在export.i内加入所需要swig联接的接口函数。 执行export,命令如下: swig -c++ -lua LuaAMDllExport.i swig为设置环境变量后的宏,第一个参数为原始语言,第二个参数为转换后的语言。
本文作者:IMWeb json 原文出处:IMWeb社区 未经同意,禁止转载 swig的简单介绍 swig是JS模板引擎,它有如下特点: 根据路劲渲染页面 面向对象的模板继承,页面复用 动态页面 快速上手 功能强大 swig的使用 swig的变量 {{ foo.bar }} {{ foo['bar'] }} //如果变量未定义,输出空字符。 swig的标签 extends 使当前模板继承父模板,必须在文件最前 参数: file 父模板相对模板 root 的相对路径,将在后面介绍如何实现模板继承。 模板在fis3中的应用 swig的模板继承可以更好的帮我们组织代码结构,更好的复用代码。 在fis3构建中使用时,调用swig编译插件,将swig标签解析成正常的html文件即可。
---------------------------------- //add.c include "add.h" int add(int a,int b) { return a+b; } swig add.so : add.c add.h add_wrap.c gcc -shared -fPIC -o _add.so add.c add_wrap.c add_wrap.c : add.i swig swig生成add.py和add_wrap.c,gcc将add.c和add_wrap.c编译成_add.so。在add_wrap.c搜索手动封装c函数的add.c文件中的相关结构便知其实质。 include/python3.4m -lpython3.4m -o _vector.so vector.cpp vector_wrap.cxx vector_wrap.cxx : vector.i swig
swig 是1个可以将C/C++包装成其它语言(比如:C#, java , python)接口的工具,直接下载即可使用。 Foo; %} /* 解析以下内容以生成Java接口 */ extern int gcd(int x, int y); extern double Foo; 三、生成&编译 3.1 终端里输入: swig The greatest common divisor of " + x + " and " + y + " is " + g); // 访问并修改C全局变量 // SWIG
步骤0:swig简介 swig是一种可以将C++代码转换为多种脚本语言封装的工具,可以在swig官网www.swig.org下载,解压后将swig.exe的路径添加到环境变量path中即可使用swig ,包括头文件和宏定义等 之后为要封装的函数或类,可以直接引用头文件(若已经将要封装的部分的声明写在头文件中) %module Example_swig %{ #include "example.h" %} %include "example.h" 调用swig封装 在命令行中输入swig -python -c++ <swig_config>.i,其中<swig_config>.i为上面写的说明文件 将其名称改为_<name>.pyd(本例中为_Example_swig.pyd),将其与swig生成的<name>.py文件放在同一目录中 步骤四:测试调用 在python,使用import <name >即可调用刚才生成的包(同一目录下) import Example_swig a = Example_swig.example() a.say_hello() a.change(3) print(a.get_num
开始之前,我们首先需要编写一个swig接口. swig接口 swig接口,你可以理解为就像pb文件一样,要先定义一套标准的接口(interface),然后swig负责根据这个swig interface _wrap_Swig_free_example_c8af3355f0aa50cc(C.uintptr_t(_swig_i_0)) } func Swig_malloc(arg1 int) (_swig_ret ) { var swig_r int _swig_i_0 := arg1 swig_r = (int)(C. arg2 int) (_swig_ret int) { var swig_r int _swig_i_0 := arg1 _swig_i_1 := arg2 swig_r = (int)(C. _wrap_my_mod_example_c8af3355f0aa50cc(C.swig_intgo(_swig_i_0), C.swig_intgo(_swig_i_1))) return swig_r
Swig模板▸ Swig是一款Node.JS的模板引擎 官方文档: https://myvin.github.io/swig.zh-CN/index.html Github: https://github.com /node-swig/swig-templates 之前一段时间挖过swig模板,发现了一个RCE,以及一个之前的任意文件读取,之前还用这个任意读漏洞出过CTF题。 /swig/lib/parser.js:624) parse (/Users/bytedance/Desktop/swig/node_modules/swig/lib/swig.js:354) precompile swig/node_modules/swig/lib/swig.js:606) compileFile (/Users/bytedance/Desktop/swig/node_modules/swig/ lib/swig.js:696) renderFile (/Users/bytedance/Desktop/swig/node_modules/swig/lib/swig.js:570) <anonymous
关于SWIG SWIG是一个运用于编译环节的软件开发工具,它能生成出代码来使得用 C/C++ 编写的代码可以同其它编程语言连接在一起。 SWIG诞生于1995年,开始的时候用于科研,如今作为通用工具在以 GUI GPL 协议开放了源代码,官网是:www.swig.org。 SWIG在三大主力平台都可以安装,下载地址:www.swig.org/download.html,windows 中下载到的是一个zip压缩包,解压然后配置好环境变量(SWIG_HOME,Path)即可使用了 流程如下: 编写一个SWIG接口文件暴露出 getuid 函数。 将 SWIG 集成到 Android 构建流程。 将 SWIG 生成的源代码文件添加到 Android.mk 构建文件。 在命令行中运行 swig 命令就可以在相应文职生成原生代码和Java代理类,例如: swig -java -package com.apress.swig -outdir src/com/apress/
Swig java Jni开发指南 目录 Swig java Jni开发指南 Swig参考文档 全局变量 常量 只读变量 枚举 函数 结构体 类 调用函数指针 回调 类型转换 两个常用命令 简介: 的过程中,也遇到不少问题,因此总结如下: Swig参考文档 http://www.swig.org/Doc3.0/SWIGDocumentation.html swig是一个编译时软件开发工具,它能生成将用 Swig不仅是一个代码生成器,还是一个接口编译器。它不定义新的协议,也不是一个组件框架或者一个特定的运行时库。 Swig把接口文件看做输入,并生成必要的代码在java中展示接口,从而让java能够理解原生代码中的接口定义。Swig不是一个存根生成器;它产生将要被编译和运行的代码。 使用swig需要生成一个.i的接口文件,swig接口文件包含函数原型、类和变量声明,它的语法和普通的c/c++头文件一样。
Swig支持自定义filter和tag,可以将内容个性化。 假如我们需要展示成这样: ? Paste_Image.png 其中的“状态”字段,可以通过swig的自定义filter功能,将其渲染在页面上,而不需要在页面上直接写html代码。 ok,我们自定义一个filter: swig.setFilter('status', function(input) { if(input) { return autoescape %}{{ a.status | status}}{% endautoescape %} 关于autoescape的更多内容,请参考:http://paularmstrong.github.io/swig
7 SWIG 和 C++11 7.1 简介 本章简要概述了 C++11 标准的 SWIG 实现。SWIG 的这一部分仍在进行中。 这些符号也在 SWIG 生成的 C 代码中定义(除了仅在 SWIG 编译器中定义的符号“ SWIG ”)。 8.4 宏扩展 传统的预处理器宏可用于 SWIG 接口。 这是一个非标准的 SWIG 扩展。 8.5 SWIG 宏 SWIG 提供增强的宏功能 %define and%enddef 指令。 /swig_lib 4. swig -swiglib 报告的 SWIG 库安装位置,例如/usr/local/share/swig/1.3.30 5. code是以下符号常量之一: C++SWIG_MemoryError SWIG_IOError SWIG_RuntimeError SWIG_IndexError SWIG_TypeError SWIG_DivisionByZero
16.3 SWIG 运行时代码 许多 SWIG 的目标语言都会生成一组通常称为“SWIG 运行时”的函数。 包含此标头后,您的代码将能够调用 SWIG_TypeQuery、SWIG_NewPointerObj、SWIG_ConvertPtr 等。 28.4.3 类型映射和数组 数组给 SWIG 带来了挑战,因为像指针一样,SWIG 不知道这些是输入值还是输出值,SWIG 也不知道数组应该有多大。 SWIG_IsOK(SWIG_ConvertPtr( .....)){ lua_pushstring(L, "发生了不好的事情"); SWIG_fail; } C++ SWIG_fail_arg , swig_type_info* type); 与 SWIG_fail_arg 类似,不同之处在于它会显示 swig_type_info 信息。
不仅如此,它们还是 SWIG C++ 类型系统(它自己的一个重要主题)的组成部分。typemaps 通常不是使用 SWIG 的必需部分。 SWIG_IsOK(SWIG_ConvertPtr(obj0, (void **) &arg1, SWIGTYPE_p_Foo, 0))) { SWIG_exception_fail(SWIG_TypeError SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) { SWIG_exception_fail(SWIG_TypeError 当前支持的错误类型有: C++SWIG_UnknownError SWIG_IOError SWIG_RuntimeError SWIG_IndexError SWIG_TypeError SWIG_DivisionByZero SWIG_OverflowError SWIG_SyntaxError SWIG_ValueError SWIG_SystemError SWIG_AttributeError SWIG_MemoryError
image.png snowboy使用的是swig编译。 swig介绍 C 和 C++ 被公认为(理当如此)创建高性能代码的首选平台。 对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。 SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。本文使用 Ruby 作为公开 C/C++ 功能的首选脚本接口。 swig默认需要的版本是3.0.10以上,再ubuntu18.04上默认安装的是3.0.12版本 $ sudo apt install swig image.png 安装snowboy 获取源代码: $ git clone https://github.com/Kitt-AI/snowboy.git 进入snowboy/swig/Python目录或者snowboy/swig/Python3目录(和本地安装的