使用 emscripten 编译为 WASM 时在 C++ 中使用 protofub。从文档编译示例时出错

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

我需要帮助解决问题

  1. 我正在将部分 javascript 库重写为 wasm

  2. 我使用以下命令将 C++ 代码编译为 wasm:

    emcc idw.cpp -Oz -s WASM=1 -s --no-entry -o idw.wasm
    (emcc --version => 3.1.70)

  3. 我有一个现成的解决方案(MVP)。但我对它的速度不满意,因为我必须使用 json 来传输数据

我决定尝试使用protobuf。为了了解如何使用它,我尝试重复文档中的这个简单示例 https://protobuf.dev/getting-started/cpptutorial/

  1. 使用此命令:

    protoc -I=. --cpp_out=. addressbook.proto
    ,我得到了 *.pb.cc 、 *.pb.h 文件(protoc --version => libprotoc 25.1)。地址簿.proto 取自示例

  2. 添加以下到我的idw.cpp文件

#include "proto/addressbook.**pb.h**"
    
const int justDoIt() {
    tutorial::AddressBook address_book;
    
    return 1;
}
  1. 我执行命令

    emcc idw.cpp -Oz -s WASM=1 -s --no-entry -o idw.wasm

  2. 我收到错误:

wasm-ld:错误: C:\Users\DellPC\AppData\Local\Temp mscripten_temp_lcwq3urd\idw_0.o: 未定义符号:教程::AddressBook::~AddressBook() wasm-ld: 错误: C:\Users\DellPC\AppData\Local\Temp mscripten_temp_lcwq3urd\idw_0.o: 未定义的符号: 教程::AddressBook::AddressBook(google::protobuf::Arena*)

我有 Windows(唉)也很重要,主要目标是获取 wasm 文件。 我将非常感谢您的回答

c++ protocol-buffers webassembly emscripten protoc
1个回答
0
投票

万岁,我想通了,也许我的答案会有用。使用此命令编译:

emcc -L ./lib -lprotobuf idw.cpp ./proto/addressbook.pb.cc -Oz -s WASM=1 -s --no-entry -s ERROR_ON_UNDEFINED_SYMBOLS=0 -o idw.wasm

.lib 文件夹的文件取自这里:https://github.com/dsyer/protobuf-wasm

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