#c #webassembly
#c #webassembly
Вопрос:
Я пытаюсь скомпилировать файл C , связанный с внешней библиотекой, с помощью Wasmer.
Я создал внешнюю библиотеку, используя:
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
mkdir build amp;amp; cd build
wasimake cmake -GNinja ..
wasimake ninja
В результате у меня есть liboqs.a
библиотека, которую я хочу повторно использовать в коде, который я пытаюсь скомпилировать в Wasm.
Вот код:
#include <stdio.h>
#include <oqs/oqs.h>
int main(void)
{
uint8_t public_key[OQS_KEM_frodokem_640_aes_length_public_key];
uint8_t secret_key[OQS_KEM_frodokem_640_aes_length_secret_key];
OQS_STATUS rc;
rc = OQS_KEM_frodokem_640_aes_keypair(public_key, secret_key);
printf("%dt", (int)rc);
return 0;
}
Компиляция файла с помощью этой команды:
wasicc -I ../../build/include "liboqs.a" "example.cpp" -o example.wasm
../../build/include
— путь к папке сборки внешней библиотеки.
Я получаю эту ошибку:
wasm-ld: error: liboqs.a(rand.c.o): undefined symbol: __memory_base
Я не понимаю, что означает эта ошибка и что может быть ее причиной.
Ответ №1:
Не уверен, поможет ли это, но я смог создать этот файл C ниже:
cd liboqs
mkdir build amp;amp; cd build
cmake -GNinja ..
wasicc
-o example.wasm
-I liboqs/build/include
example.c
#include <stdio.h>
#include <oqs/oqs.h>
int main(void)
{
uint8_t public_key[OQS_KEM_frodokem_640_aes_length_public_key];
uint8_t secret_key[OQS_KEM_frodokem_640_aes_length_secret_key];
return 0;
}
Комментарии:
1. Спасибо.
OQS_KEM_frodokem_640_aes_keypair
внутренняя функция использует библиотеку openssl, я думаю, она также должна быть собрана сwasimake
помощью tool.