使用Emscripten编译C++项目遇头文件重复引用及找不到问题
解决Emscripten编译头文件找不到及重复Include问题
1. 修复头文件路径找不到的编译错误
Emscripten的emcc编译器无法自动识别非标准路径下的头文件,必须通过-I参数显式指定头文件所在的根目录。
假设Network/BtChannel.h的上级目录是/mnt/c/Users/DELL USER/OneDrive/Desktop/MultipartyPSI-190723,修改编译命令如下:
emcc -o testnpsi.html main.cpp -O3 -s WASM=1 --shell-file emscripten_enabler/shell_minimal.html -s NO_EXIT_RUNTIME=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall']" -I/mnt/c/Users/DELL\ USER/OneDrive/Desktop/MultipartyPSI-190723
如果Network目录在当前编译目录的上级,也可以用相对路径简化:
emcc -o testnpsi.html main.cpp -O3 -s WASM=1 --shell-file emscripten_enabler/shell_minimal.html -s NO_EXIT_RUNTIME=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall']" -I../
注意:路径含空格时,要么用反斜杠转义(如DELL\ USER),要么把整个路径用双引号包裹。
2. 解决重复Include触发的错误
多个.cpp重复包含同个头文件导致的错误,本质是头文件未添加重复包含保护。给每个.h文件添加以下任意一种保护即可:
- 传统宏定义保护(兼容性最强):
#ifndef NETWORK_BTCHANNEL_H #define NETWORK_BTCHANNEL_H // 原头文件代码内容 #endif // NETWORK_BTCHANNEL_H
- 简洁版
#pragma once(主流编译器均支持,包括Emscripten使用的Clang):
#pragma once // 原头文件代码内容
3. 消除VS Code中的头文件找不到提示
在项目根目录创建.vscode/c_cpp_properties.json,添加头文件路径配置,让VS Code的IntelliSense能识别:
{ "configurations": [ { "name": "WSL", "includePath": [ "${workspaceFolder}/**", "/mnt/c/Users/DELL USER/OneDrive/Desktop/MultipartyPSI-190723/**" ], "compilerPath": "/usr/bin/clang", "cppStandard": "c++17", "intelliSenseMode": "linux-clang-x64" } ], "version": 4 }
将上述路径替换为你实际的头文件根目录即可。
内容的提问来源于stack exchange,提问作者lit
相关产品推荐
相关产品推荐

