我希望能够以某种方式将C程序编译为WASM,而意式浓缩咖啡是Micro Runtime(

问题描述 投票:0回答:1

我找到了一个解决方案,可用于以下Hello World计划,从浓缩咖啡中提供的Micro RuntimeRepository

#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { char *buf; printf("Hello world!\n"); buf = malloc(1024); if (!buf) { printf("malloc buf failed\n"); return -1; } printf("buf ptr: %p\n", buf); snprintf(buf, 1024, "%s", "1234\n"); printf("buf: %s", buf); free(buf); return 0; }

在路径上的目录中是程序,以及
c esp32 webassembly
1个回答
0
投票
文件:

build.sh

我们可以清楚地提取必要的编译器(有必要使用WASI-SDK Clang编译器)以及编译器标志。每个标志的目的是什么,可以找到。

# Copyright (C) 2019 Intel Corporation. All rights reserved. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception WAMR_DIR=${PWD}/../../.. echo "Build wasm app .." /opt/wasi-sdk/bin/clang -O3 \ -z stack-size=4096 -Wl,--initial-memory=65536 \ -o test.wasm main.c \ -Wl,--export=main -Wl,--export=__main_argc_argv \ -Wl,--export=__data_end -Wl,--export=__heap_base \ -Wl,--strip-all,--no-entry \ -Wl,--allow-undefined \ -nostdlib \ echo "Build binarydump tool .." rm -fr build && mkdir build && cd build cmake ../../../../test-tools/binarydump-tool make cd .. echo "Generate test_wasm.h .." ./build/binarydump -o test_wasm.h -n wasm_test_file test.wasm echo "Done"

:优化级别3 GO
HERE
有关更多信息

-O3
:链接器参数,是线性内存的区域的辅助堆栈大小,必须小于初始内存大小

-z stack-size

:线性内存的初始大小,必须是65536
    的倍数
  • -Wl,--initial-memory
    :将输出写入
  • -o
  • :在这种情况下强制要导出的符号,主函数
  • -Wl,--export=main
  • :基本上是同一件事,但是我不确定为什么我们需要它
    -Wl,--export=__main_argc_argv
  • -Wl,--export=__data_end
    :我不知道,为什么我们需要这些,但是我发现了这个reddit
    post
  • ,带有“ schoens”的答案:
  • 
    those的导出由WASM-LD(LLD中的WebAssembly Backend,并由Clang使用)定义。链接器正在添加这些符号,因为它们是必需的 - 它们并不是偶然导出的额外符号。 __HEAP_BASE符号用于指示线性内存中堆的开始和堆栈的结尾。 __data_end标记了数据/BSS部分的末尾和堆栈的开始。
    
  • -Wl,--export=__data_end
  • :剥离所有符号(删除函数,变量等所有不符合符号,例如函数...),并且不会在程序中产生一个入口点,这意味着无法按原样执行所产生的文件,但需要将其链接到另一个程序中(胶水代码),我认为我认为这是由wasmruntime wastm runtime time time time timemruntime
  • -Wl,--strip-all,--no-entry
    :允许链接的二进制中的未定义符号。我们需要这个,因为在某个时候我们可能希望将功能注入WASM应用程序,因此该应用程序可以调用运行时间外定义的函数。
    
    -Wl,--allow-undefined:链接时请勿使用标准系统启动文件或库。这是必要的,因为意式浓缩咖啡决定使用Wamr的Libc-Builtin库。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.