Компиляция C с внешней библиотекой в Wasm с использованием Wasmer

#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.