Electron包重建时出现bits/c++config.h缺失错误求助
Electron跨平台打包编译报错:bits/c++config.h文件缺失
问题场景
在Kali Linux环境下执行node build.js打包Win32 ia32平台Electron应用(使用Electron v7.3.3)时,触发编译错误,核心报错为找不到bits/c++config.h文件。此前为解决openssl_fips未定义问题已将Node.js降级至v16.16.0,且已尝试安装gcc-multilib、更新依赖版本、移除配置中的-m32标志,但均未解决问题。
完整报错信息
┌──(kali♥kali)-[~/Desktop/.../NodeJs/Terminal] 10:51 └─$ node build.js Packaging app for platform win32 ia32 using electron v7.3.3 Well, sometimes you are not so lucky: gyp info it worked if it ends with ok gyp info using node-gyp@6.1.0 gyp info using node@16.16.0 | linux | x64 gyp info find Python using Python version 3.10.4 found at "/usr/bin/python3" (node:136591) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only. (Use `node --trace-deprecation ...` to show where the warning was created) gyp info spawn /usr/bin/python3 gyp info spawn args [ gyp info spawn args '/home/kali/Desktop/.../NodeJs/Terminal/node_modules/node-gyp/gyp/gyp_main.py', gyp info spawn args 'binding.gyp', gyp info spawn args '-f', gyp info spawn args 'make', gyp info spawn args '-I', gyp info spawn args '/tmp/electron-packager/win32-ia32/Bridge-win32-ia32/resources/app/node_modules/@serialport/bindings-cpp/build/config.gypi', gyp info spawn args '-I', gyp info spawn args '/home/kali/Desktop/.../NodeJs/Terminal/node_modules/node-gyp/addon.gypi', gyp info spawn args '-I', gyp info spawn args '/home/kali/.electron-gyp/7.3.3/include/node/common.gypi', gyp info spawn args '-Dlibrary=shared_library', gyp info spawn args '-Dvisibility=default', gyp info spawn args '-Dnode_root_dir=/home/kali/.electron-gyp/7.3.3', gyp info spawn args '-Dnode_gyp_dir=/home/kali/Desktop/.../NodeJs/Terminal/node_modules/node-gyp', gyp info spawn args '-Dnode_lib_file=/home/kali/.electron-gyp/7.3.3/<(target_arch)/node.lib', gyp info spawn args '-Dmodule_root_dir=/tmp/electron-packager/win32-ia32/Bridge-win32-ia32/resources/app/node_modules/@serialport/bindings-cpp', gyp info spawn args '-Dnode_engine=v8', gyp info spawn args '--depth=.', gyp info spawn args '--no-parallel', gyp info spawn args '--generator-output', gyp info spawn args 'build', gyp info spawn args '-Goutput_dir=.' gyp info spawn args ] gyp info spawn make gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] make: Entering directory '/tmp/electron-packager/win32-ia32/Bridge-win32-ia32/resources/app/node_modules/@serialport/bindings-cpp/build' CXX(target) Release/obj.target/bindings/src/serialport.o In file included from /usr/include/c++/12/stdlib.h:36, from ../src/./serialport.h:12, from ../src/serialport.cpp:1: /usr/include/c++/12/cstdlib:41:10: fatal error: bits/c++config.h: No such file or directory 41 | #include <bits/c++config.h> | ^~~~~~~~~~~~~~~~~~ compilation terminated. make: *** [bindings.target.mk:110: Release/obj.target/bindings/src/serialport.o] Error 1 make: Leaving directory '/tmp/electron-packager/win32-ia32/Bridge-win32-ia32/resources/app/node_modules/@serialport/bindings-cpp/build' gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/home/kali/Desktop/.../NodeJs/Terminal/node_modules/node-gyp/lib/build.js:194:23) gyp ERR! stack at ChildProcess.emit (node:events:527:28) gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12) gyp ERR! System Linux 5.16.0-kali7-amd64 gyp ERR! command "/usr/local/bin/node" "/home/kali/Desktop/.../NodeJs/Terminal/node_modules/.bin/node-gyp" "rebuild" "--target=7.3.3" "--arch=ia32" "--dist-url=https://www.electronjs.org/headers" "--build-from-source" gyp ERR! cwd /tmp/electron-packager/win32-ia32/Bridge-win32-ia32/resources/app/node_modules/@serialport/bindings-cpp gyp ERR! node -v v16.16.0 gyp ERR! node-gyp -v v6.1.0 gyp ERR! not ok
当前项目开发依赖
"devDependencies": { "electron": "^1.7.5", "electron-packager": "^12.2.0", "electron-rebuild": "^1.8.2", "electron-winstaller": "^2.7.0" },
解决方案
1. 安装32位C++标准库开发文件
报错本质是交叉编译Win32 ia32时缺少对应架构的C++标准库头文件,执行以下命令安装:
sudo apt install libstdc++6:i386 libstdc++-12-dev:i386
(注:版本号12对应报错中的gcc版本,若你的gcc版本不同,替换为对应数字)
2. 配置Win32交叉编译工具链
Linux下打包Win32应用需要使用mingw32交叉编译工具,先安装工具链:
sudo apt install mingw-w64
然后设置环境变量指定工具链:
export CC=i686-w64-mingw32-gcc export CXX=i686-w64-mingw32-g++ export AR=i686-w64-mingw32-ar export RANLIB=i686-w64-mingw32-ranlib
3. 统一Electron版本
当前项目devDependencies中的Electron版本(^1.7.5)与打包使用的v7.3.3不一致,可能导致编译兼容问题。修改devDependencies:
"devDependencies": { "electron": "^7.3.3", "electron-packager": "^12.2.0", "electron-rebuild": "^1.8.2", "electron-winstaller": "^2.7.0" },
然后重新安装依赖:
npm install
4. 手动执行electron-rebuild
设置好环境变量后,手动执行重建命令确保依赖编译正确:
npx electron-rebuild --arch=ia32 --target=7.3.3 --dist-url=https://www.electronjs.org/headers
内容的提问来源于stack exchange,提问作者krysto
相关产品推荐
相关产品推荐

