【问题标题】:Compiling C++ with external library to Wasm using Wasmer使用 Wasmer 将带有外部库的 C++ 编译为 Wasm
【发布时间】:2021-12-10 23:48:01
【问题描述】:

我正在尝试使用 Wasmer 编译与外部库链接的 C++ 文件。

我使用以下方法构建了external library

git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
mkdir build && 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("%d\t", (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

我不明白这个错误是什么意思,可能是什么原因。

【问题讨论】:

    标签: c++ webassembly


    【解决方案1】:

    不确定这是否有帮助,但我能够在下面构建这个 C 文件:

    cd liboqs
    mkdir build && 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;
    }
    

    【讨论】:

    • 谢谢。 OQS_KEM_frodokem_640_aes_keypair 函数内部使用的是 openssl 库,我猜它必须也是用 wasimake 工具构建的。
    猜你喜欢
    • 2017-09-27
    • 2020-11-11
    • 2020-11-04
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多