使用 emcc 将 C++ 代码编译为 WASM 的问题

Posted

技术标签:

【中文标题】使用 emcc 将 C++ 代码编译为 WASM 的问题【英文标题】:Problem in compilation of C++ code to WASM using emcc 【发布时间】:2020-11-04 15:31:03 【问题描述】:

我正在尝试将 C++ 代码编译为 WASM,但遇到了问题。我的 C++ 代码包括 dlib 和 OpenCV 库。我已经为 C++ 环境成功编译了 OpenCV 和 dlib。另外,我已经在我的系统中安装了 emscripten。

目录结构是

C 盘

|..

|--dlib

|-- emsdk

|--opencv

|-- cpp_project

现在,当我在命令提示符下的 cpp_project 目录内(以管理员模式打开)时,我正在执行以下命令。

emcc -msse3 -msimd128 -std=c++11 -O3 -I ../dlib ../opencv/build/include/opencv2/core.hpp ../dlib/dlib/all/source .cpp -lstdc++ -lpthread -s USE_PTHREADS=1 -s PTHREAD_POOL_SIZE=4 -s TOTAL_MEMORY=1024MB -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap']" -s WASM=1 -o main.js

我收到以下错误:

../opencv/build/include/opencv2/core.hpp:52:10:致命错误:找不到“opencv2/core/cvdef.h”文件

#include "opencv2/core/cvdef.h" ^~~~~~~~~~~~~~~~~~~~~~ 产生 1 个错误。

请帮帮我。

【问题讨论】:

为什么不使用现代开源 C++ 编译器,例如 GCC 或 Clang ?无论您使用什么编译器,请阅读其文档并查看this C++ reference。如果您正在学习 C++,请考虑使用良好的 Linux 发行版,例如 Debian 【参考方案1】:

您必须将-I ../dlib ../opencv/build/include/opencv2/core.hpp 更改为 -I ../dlib -I ../opencv/build/include

【讨论】:

先生,您能帮我解决这个问题吗:***.com/questions/63032793/…

以上是关于使用 emcc 将 C++ 代码编译为 WASM 的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 C++ 文件编译为 WebAssembly?

emscripten 集成web常用编译命令

如何使用LLVM将C语言编译为WASM

编译为 Wasm 时,指向堆分配内存的 Rust 指针可以为 0 吗?

将现有 C# 代码编译为 WebAssembly

成功把泰山Office编译为wasm