MALOUDA-PSA 2024-04-17 19:56 采纳率: 90.9%
浏览 3
已结题

webassembly编译为库的问题

c++的函数:

void EncryptionAES(const char * strSrc, const char * gkey, const char* giv,     char** str)
.........

编译命令:


emcc encdecso.cpp AES.cpp Base64.cpp -o webassemencdec.wasm -s WASM=1 -s MOD    ULARIZE=1 -s EXPORTED_FUNCTIONS='["_EncryptionAES"]' -O3

报错如下:

cache:INFO: - ok
wasm-ld: error: symbol exported via --export not found: EncryptionAES
wasm-ld: error: /Users/yeair/frontend/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libstandalonewasm-nocatch.a(__main_void.o): undefined symbol: main
emcc: error: '/Users/yeair/frontend/emsdk/upstream/bin/wasm-ld -o webassemencdec.wasm /var/folders/12/fs6h0k9n0ln7gmmgjrdkx19h0000gn/T/emscripten_temp_haj8fda4/encdecso_0.o -L/Users/yeair/frontend/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten /var/folders/12/fs6h0k9n0ln7gmmgjrdkx19h0000gn/T/emscripten_temp_haj8fda4/AES_1.o /var/folders/12/fs6h0k9n0ln7gmmgjrdkx19h0000gn/T/emscripten_temp_haj8fda4/Base64_2.o /Users/yeair/frontend/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/crt1.o -lGL-getprocaddr -lal -lhtml5 -lstandalonewasm-nocatch -lstubs -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/12/fs6h0k9n0ln7gmmgjrdkx19h0000gn/T/tmpyw6wm565libemscripten_js_symbols.so --strip-debug --export=EncryptionAES --export=emscripten_stack_get_current --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --table-base=1 --global-base=1024' failed (returned 1)

  • 写回答

4条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-17 19:57
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    根据报错信息,可以看出存在以下两个问题:

    1. **缺少main函数:**报错信息中提到了undefined symbol: main,这表示缺少了主函数main。在C++程序中,必须要有一个入口函数main作为程序的起点。

    2. **函数符号未找到:**报错信息中还提到了symbol exported via --export not found: EncryptionAES,这说明在编译WASM时没有找到EncryptionAES函数的定义。可能是由于函数的命名不正确或者链接的对象文件中没有包含该函数的定义。

    针对以上问题,以下是可能的解决方案:

    1. **添加main函数:**为了解决缺少主函数的问题,可以添加一个空的主函数main,如下所示:
    int main() {
        return 0;
    }
    
    1. **确保函数符号正确链接:**检查函数EncryptionAES的定义是否正确,并确保链接的对象文件中包含该函数的定义。如果可能,可以提供encdecso.cppAES.cppBase64.cpp文件的相关内容,以便更好地帮助定位问题。

    综上所述,可能的解决方案为

    1. 在源代码文件中添加一个空的main函数。
    2. 确保函数EncryptionAES的定义正确,并且链接的对象文件中包含该函数的定义。

    如果问题仍然存在,建议将相关代码提供出来,以便更好地帮助解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)