innative(AOT编译器)
v0.1.10 官方版- 软件大小:145.0 MB
- 更新日期:2021-05-20 17:45
- 软件语言:英文
- 软件类别:编程工具
- 软件授权:免费版
- 软件官网:待审核
- 适用平台:WinXP, Win7, Win8, Win10, WinAll
- 软件厂商:
软件介绍 人气软件 下载地址
innative可以帮助用户编辑WebAssembly,您可以在软件上获取构建WebAssembly模块需要的大部分功能,构建完毕就可以将其添加到其他开发软件使用,结合SDK功能就可以嵌入到新的项目使用,让用户可以快速完成新项目编程,软件提供了一个符合标准的WebAssembly环境,还允许进行广泛的自定义,并且包括一些非标准的内置功能,从而使本机WebAssembly模块的工作更加轻松,您可以通过静态嵌入、静态共享嵌入、动态共享嵌入的方式部署innative,也可以通过命令行的方式运行软件,如果你需要这款软件就可以下载使用!
软件功能
inNative是跨平台的WebAssembly实现,可以嵌入到您的程序中,也可以作为独立的运行时安装。它将WebAssembly模块编译成C二进制文件,可以将其链接为静态或动态库,并可以通过简单的C接口进行访问。
尽管inNative符合标准,但它为您提供了一些选项,可以调整要实施的标准的哪些部分,从而允许您指定如何对所生成的WebAssembly二进制文件进行沙盒化(或不进行沙盒化)。这使inNative可以安全地在主机程序中执行沙盒WebAssembly,或者像本机程序一样编译调用内核函数的模块。
辅助功能
该inNative默认环境提供了几个辅助功能旨在使调试本地WebAssembly容易。所有这些函数都被视为具有默认调用约定的原始C函数,并且应像其他任何C函数一样导入。编译器本身还提供了一些内在函数,从WebAssembly的角度来看它们就像辅助函数。其中一些功能并不安全,如果启用了白名单,则必须像其他C函数一样将所有白名单列入白名单。
本地cref扩展
inNative实现cref代表C指针的自定义值类型。在大多数情况下,它的行为anyref与“引用类型建议”中的行为类似,充当传递给C存储器的不透明指针。anyref但是,与不同,您可以传递i32或传递i64给cref类型。该类型具有二进制编码,可以在任何标准的webassembly模块中实现,但是由于没有编译器可以生成该值,因此该类型主要用于.wat文件中。
软件特色
inNative随附执行3个测试阶段的测试工具:
内部测试,旨在测试本机特定结构和非标准Webassembly扩展
基准测试,针对一个函数的多个Webassembly编译版本测试C ++版本的性能
标准的Web程序集测试,这是inNative实施.wast的当前规范中指定的所有核心文件。
命令行
inNative命令行使您可以访问已安装的运行时的功能,从而可以通过多种方式来编译,反编译或运行Webassembly模块。命令行接受格式为的WebAssembly文件列表.wasm,.wat或.wast根据提供的命令行选项将它们链接在一起。它还具有通过某些标志或命令行开关访问的其他功能
使用说明
静态嵌入
对于要加载WebAssembly模块的大多数应用程序,建议使用静态嵌入inNative方法。尽管依赖于平台,但所有平台都必须:
1、下载或安装SDK。
2、链接到inNative静态库
3、将include/innative头文件添加到项目
4、包含inNative Default Environment静态库
静态库不能包含其他静态库,因此您需要将其包含innative.lib在正在构建的根可执行文件或DLL中。因为您是静态嵌入库,所以您可以访问外部API中列出的所有静态函数。
Windows
静态库:innative.lib和innative-d.lib
默认环境:innative-env.lib和innative-env-d.lib
将静态库添加到项目的其他依赖项(对于Visual Studio)或构建系统的等效项。将默认环境库放在/bin/文件夹中,并确保将其随应用程序一起分发。
创建自定义环境
nNative嵌入环境实际上只是标准C库,它们将C函数公开给正在使用其进行编译的WebAssembly模块。但是,inNative还支持通过基于名称处理规则导出专门命名的函数来创建公开与WebAssembly兼容的函数的C库。
导出C函数
编译一个静态(或共享)库,该库将要公开的C函数导出到WebAssembly模块。如果您使用的是C ++,请确保使用extern "C"来防止任何C ++名称修改。然后,只需在引用库的同时编译WebAssembly模块即可。
Windows示例
./innative-cmd.exe your_module.wasm -l your_library.lib
因为Windows会.lib为DLL生成文件,所以您应该为DLL或静态库执行此操作。
Linux示例
./innative-cmd your_module.wasm -l your_library.a
或者
./innative-cmd your_module.wasm -L your_shared_library
Linux有一个特殊的-L选项,告诉它链接到应该使用的共享库。请记住,在上面的示例中,实际文件名为libyour_shared_library.so,这是链接程序将在当前路径中查找的名称。有时,链接程序可能对库路径有些挑剔,在这种情况下,您可能想指定整个绝对路径。
如果已按照上述说明进行操作,则现在可以使用基本的C导入方法来导入C函数:
(import “ ” “ your_function ”(func $ yourfunc(result i32)))
使用标准的C调用约定通常是一个好主意,但是对于C函数,您还可以使用其他调用约定
导出WebAssembly函数
也可以创建一个公开WebAssembly函数的库,但前提是它们必须遵循严格的规则集。“名称修饰”文章详细介绍了名称修饰如何将模块+函数名称对转换为单个C符号:[module]_WASM_[function]。可以相反地进行这种处理,以从C函数声明中获取WebAssembly模块+函数名称对。
再一次,extern "C"如果您使用的是C ++ ,请确保添加。如果使用此功能编译库并将其添加到inNative命令行中,则可以将其导入到WebAssembly模块中,如下所示:
(import “ your_module ” “ your_function ”(func $ functest(param i64 f64 f32 i32)(result i64)))
但是,有一些限制:函数必须具有默认的C调用约定!如果它使用任何其他调用约定,则该行为是不确定的且不安全的。此外,只能使用5种类型:
当然,您也可以替换uint32_t为int32_t,并uint64_t为int64_t没有问题。您也可以将任意指针类型替换为void*。但是,void*必须映射到i6464位体系结构,i3232位体系结构,或者cref要使用inNative的cref扩展名。在将C函数签名与WebAssembly等效项进行匹配时,请格外小心,因为签名不匹配会破坏沙箱或使程序完全崩溃。
请记住,WebAssembly函数胜过C函数-如果导出伪装为WebAssembly导入的C函数,但是存在另一个具有相同名称和函数定义的WebAssembly模块,则WebAssembly版本将获胜。在将C函数导出为WebAssembly导入时,请确保为假模块选择唯一的名称。
更新日志
废弃了Makefiles,转而使用CMake项目。(#33)
添加了#49 WASM指令执行计数器
添加了#26完全支持汇编脚本
增加了#20选项,可设置自定义启动函数
修正了#71处理调试信息时的边缘案例
修正了#72使用共享库时的绝对路径问题
修正了错误的llvm::Twine用法
改变了日志记录以使用回调函数
停止对内存密集的调试信息使用贪婪的分配器
修正了WAT解析过程中过多的内存使用
人气软件
-
redis desktop manager2020.1中文 32.52 MB
/简体中文 -
s7 200 smart编程软件 187 MB
/简体中文 -
GX Works 2(三菱PLC编程软件) 487 MB
/简体中文 -
CIMCO Edit V8中文 248 MB
/简体中文 -
JetBrains DataGrip 353 MB
/英文 -
Dev C++下载 (TDM-GCC) 83.52 MB
/简体中文 -
TouchWin编辑工具(信捷触摸屏编程软件) 55.69 MB
/简体中文 -
信捷PLC编程工具软件 14.4 MB
/简体中文 -
TLauncher(Minecraft游戏启动器) 16.95 MB
/英文 -
Ardublock中文版(Arduino图形化编程软件) 2.65 MB
/简体中文