我需要帮助解决问题
我正在将部分 javascript 库重写为 wasm。
我使用以下命令将 C++ 代码编译为 wasm:
emcc idw.cpp -Oz -s WASM=1 -s --no-entry -o idw.wasm
(emcc --version => 3.1.70)
我有一个现成的解决方案(MVP)。但我对它的速度不满意,因为我必须使用 json 来传输数据
我决定尝试使用protobuf。为了了解如何使用它,我尝试重复文档中的这个简单示例 https://protobuf.dev/getting-started/cpptutorial/
使用此命令:
protoc -I=. --cpp_out=. addressbook.proto
,我得到了 *.pb.cc 、 *.pb.h 文件(protoc --version => libprotoc 25.1)。地址簿.proto 取自示例
添加以下行到我的idw.cpp文件
#include "proto/addressbook.**pb.h**"
const int justDoIt() {
tutorial::AddressBook address_book;
return 1;
}
我执行命令
emcc idw.cpp -Oz -s WASM=1 -s --no-entry -o idw.wasm
我收到错误:
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 文件。 我将非常感谢您的回答
万岁,我想通了,也许我的答案会有用。使用此命令编译:
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