使用Emscripten从C语言编译到WebAssembly。

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

我想把一个程序从C语言编译成WebAssembly。这个程序应该取一个数字,计算最多给定数字的质数,然后返回经过的时间(以微秒为单位)。我使用Emscripten进行编译,得到了这样一个错误。"C:/Users/Pawel/Desktop/Wasm/main.c:20:1: error: implicit declaration of function 'calcPrimes' is invalid in C99 [-Werror,-Wimplicit-function-declaration] calcPrimes(number); ^ 1 error generated. emcc: error: 'C:UsersPawelDesktopemsdkemsdkupstreambin\clang. exe -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=1 -D__EMSCRIPTEN_minor__=39 -D__EMSCRIPTEN_tiny__=15 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystemC: \Users/Pawel/Desktop/emsdk/emsdk/upstream/emscripten/system/include/compat -Xclang -isystemC: \User/Pawel/Desktop/demdk/upstream/emscripten/system/include -Xclang -isystemC:Users/Pawel/Desktop/demdk/upstream/emscripten/system/include/libc -Xclang -isystemC: \Users/Pawel/Desktop/demdk/demdk/upstream/emscripten/system/libc/muslarch/emscripten -Xclang -isystemC:Users/Pawel/Desktop/demdk/demdk/upstream/emscripten/system/local/include -Xclang -isystemC:Users/Pawel. emscripten_cache/wasminclude -DEMSCRIPTEN -fignore-exceptions C:Users/Pawel/Desktop/Wasmmain. c -Xclang -isystemC:Users/Pawel/Desktop/emsdk/emsdk/upstream/emscripten/system/include/SDL -c -o C:Users/Pawel/AppData/Local/Tempemscripten_temp_nqmlki_g/main_0. o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (1)"

先谢谢大家的帮助! 我的代码。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <emscripten.h>

EMSCRIPTEN_KEEPALIVE
long getDuration(int number){
struct timespec ts;
struct timespec {
    time_t   tv_sec;       
    long     tv_nsec;      
};

timespec_get(&ts, TIME_UTC);
long startsc = ts.tv_sec;
long startns = ts.tv_nsec;

calcPrimes(number);

timespec_get(&ts, TIME_UTC);
long endsc = ts.tv_sec;
long endns = ts.tv_nsec;

long resus = (endsc - startsc) * 1000000 + (endns/1000) - (startns/1000);
return resus;
}

int isPrime(int num) {
    int i;
    if(num == 2) return 1;
    if(num % 2 == 0) return 0;
    int sq = (int) sqrt(num) + 1;
    for(i = 3; i < sq; i = i + 2) if(num % i == 0) return 0;
    return 1;
}

int calcPrimes(int n) {
    int i, count = 0;
    for(i = 2; i <= n; i++) if(isPrime(i)) count++;
    return count;
}
c compilation webassembly emscripten
1个回答
1
投票

你缺少一个正向声明 calcPrimes. 你需要添加一个,或者移动到 getDuration 下面 calcPrimes 在您的文件中。

© www.soinside.com 2019 - 2024. All rights reserved.