安下载编程开发

分类分类

innative(AOT编译器)

innative(AOT编译器)

v0.1.10 官方版

大小:145.0 MB 更新:2021/05/20

类别:编程工具系统:WinXP, Win7, Win8, Win10, WinAll

立即下载

  innative可以帮助用户编辑WebAssembly,您可以在软件上获取构建WebAssembly模块需要的大部分功能,构建完毕就可以将其添加到其他开发软件使用,结合SDK功能就可以嵌入到新的项目使用,让用户可以快速完成新项目编程,软件提供了一个符合标准的WebAssembly环境,还允许进行广泛的自定义,并且包括一些非标准的内置功能,从而使本机WebAssembly模块的工作更加轻松,您可以通过静态嵌入、静态共享嵌入、动态共享嵌入的方式部署innative,也可以通过命令行的方式运行软件,如果你需要这款软件就可以下载使用!

innative(AOT编译器)

软件功能

  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根据提供的命令行选项将它们链接在一起。它还具有通过某些标志或命令行开关访问的其他功能

innative(AOT编译器)

使用说明

  静态嵌入

  对于要加载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模块+函数名称对。

innative(AOT编译器)

  再一次,extern "C"如果您使用的是C ++ ,请确保添加。如果使用此功能编译库并将其添加到inNative命令行中,则可以将其导入到WebAssembly模块中,如下所示:

  (import “ your_module ” “ your_function ”(func $ functest(param i64 f64 f32 i32)(result i64)))

  但是,有一些限制:函数必须具有默认的C调用约定!如果它使用任何其他调用约定,则该行为是不确定的且不安全的。此外,只能使用5种类型:

innative(AOT编译器)

  当然,您也可以替换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解析过程中过多的内存使用

精品推荐
同类推荐
相关下载
  • 最新排行
  • 最热排行
  • 评分最高
编程开发排行榜
实时热词