使用Emscripten编译ITK时遇sizeof(void *)不匹配错误求助
问题
尝试使用Emscripten编译C++代码,先进行ITK构建:
- 执行
git clone https://github.com/InsightSoftwareConsortium/ITK.git克隆仓库 - 运行CMake命令:
cmake .. -DCMAKE_TOOLCHAIN_FILE=C:\emsdk\upstream\emscripten\cmake\Modules\Platform\Emscripten.cmake
执行后出现错误:
CMake Error at Modules/ThirdParty/ZLIB/src/itkzlib-ng/CMakeLists.txt:466 (message): sizeof(void *) is neither 32 nor 64 bit
完整构建日志片段:
C:\itknew\ITK\build>cmake .. -DCMAKE_TOOLCHAIN_FILE=C:\emsdk\upstream\emscripten\cmake\Modules\Platform\Emscripten.cmake -- Found Git: C:/Program Files/Git/cmd/git.exe (found version "2.39.2.windows.1") ... -- sizeof(void *) is bytes CMake Error at Modules/ThirdParty/ZLIB/src/itkzlib-ng/CMakeLists.txt:466 (message): sizeof(void *) is neither 32 nor 64 bit -- Configuring incomplete, errors occurred!
使用的Emscripten版本为3.1.34。
错误原因
该错误的核心是CMake在交叉编译环境中未能正确检测到Emscripten目标平台的指针大小,导致sizeof(void *)的值为空,触发了zlib-ng的CMake脚本校验逻辑——该脚本仅允许32位或64位指针环境。
具体诱因可能包括:
- Emscripten环境未正确激活:运行CMake前未执行
emsdk activate和emsdk_env.bat(Windows环境)配置环境变量,导致CMake无法调用正确的Emscripten编译器与工具链,无法获取目标平台的指针信息。 - CMake版本兼容性不足:旧版本CMake对Emscripten工具链支持不完善,无法正确解析目标平台参数,导致指针大小检测失败。
- 工具链路径配置错误:
CMAKE_TOOLCHAIN_FILE路径存在拼写错误、空格或特殊字符,或Emscripten目录权限问题,导致CMake无法加载完整工具链配置,无法正确检测目标架构。
解决建议
- 正确激活Emscripten环境:在执行CMake的终端中,先运行以下命令(Windows环境):
再切换到ITK的build目录重新执行CMake命令。cd C:\emsdk emsdk activate 3.1.34 emsdk_env.bat - 升级CMake版本:使用3.21及以上版本的CMake,这类版本对Emscripten工具链的支持更完善。
- 检查工具链路径:确认
CMAKE_TOOLCHAIN_FILE的路径完全正确,若路径包含空格需用引号包裹,同时确保Emscripten安装目录有足够的读写权限。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

