I'm trying to follow a WASI-tutorial but all I'm getting are errors. I'm currently using wasmtime-cli version 1.0.0, and clang 14.0.0.
The tutorial has 3 simple steps.
- save sample code to
demo.c
. This code is shown at the bottom of this question. - compile with
clang demo.c -o demo.wasm
- run with
wasmtime demo.wasm
. This results in the error,
Error: failed to run main module `demo.wasm`
Caused by:
cannot load precompiled module `demo.wasm` unless --allow-precompiled is passed
Running again with wasmtime --allow-precompiled demo.wasm
results in another error.
Error: failed to run main module `demo.wasm`
Caused by:
bytes are not a compatible serialized wasmtime module
What could be causing this? How can I get this demo working?
// demo.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
int main(int argc, char **argv) {
ssize_t n, m;
char buf[BUFSIZ];
if (argc != 3) {
fprintf(stderr, "usage: %s <from> <to>\n", argv[0]);
exit(1);
}
int in = open(argv[1], O_RDONLY);
if (in < 0) {
fprintf(stderr, "error opening input %s: %s\n", argv[1], strerror(errno));
exit(1);
}
int out = open(argv[2], O_WRONLY | O_CREAT, 0660);
if (out < 0) {
fprintf(stderr, "error opening output %s: %s\n", argv[2], strerror(errno));
exit(1);
}
while ((n = read(in, buf, BUFSIZ)) > 0) {
char *ptr = buf;
while (n > 0) {
m = write(out, ptr, (size_t)n);
if (m < 0) {
fprintf(stderr, "write error: %s\n", strerror(errno));
exit(1);
}
n -= m;
ptr += m;
}
}
if (n < 0) {
fprintf(stderr, "read error: %s\n", strerror(errno));
exit(1);
}
return EXIT_SUCCESS;
}