在Solaris 11上编译CMake遭遇ELFCLASS32错误,求正确编译方案
在Solaris 11 SPARC上正确编译CMake的解决方案
机器信息
# uname -a SunOS 5.11 11.3 sun4v sparc sun4v
原操作的核心错误
- 下载了Linux x86_64预编译包而非CMake源码包,Solaris SPARC与Linux x86_64架构完全不兼容,无法基于该包编译
- 解压命令语法错误:
tar -xzvf cmake-3.25.2-linux-x86_64.tar.gz cd是无效命令,cd需单独执行 - Bootstrap命令调用路径错误,不应使用预编译包的二进制文件执行配置
正确编译步骤
1. 安装编译依赖
确保系统具备必要的编译工具:
pkg install gcc gmake wget
2. 下载CMake源码包
以3.25.2版本为例,下载源码压缩包:
wget https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2.tar.gz
3. 解压并进入源码目录
tar -xzvf cmake-3.25.2.tar.gz cd cmake-3.25.2
4. 执行Bootstrap配置
强制指定64位编译选项(解决ELF类不匹配问题),同时设置安装路径:
./bootstrap --prefix=/opt/cmake-3.25.2 --parallel=$(nproc) CFLAGS="-m64" CXXFLAGS="-m64"
注:
-m64强制编译器生成64位目标文件,避免链接时出现wrong ELF class: ELFCLASS32错误
5. 编译并安装
gmake gmake install
6. 验证安装结果
直接调用安装后的二进制文件验证版本:
/opt/cmake-3.25.2/bin/cmake --version
错误原因说明
链接阶段出现的wrong ELF class: ELFCLASS32,是因为部分目标文件被编译为32位格式,而Solaris 11 SPARC系统为64位架构,链接器无法混合32位与64位文件。通过添加-m64编译标志,可强制生成64位代码,彻底解决该问题。
内容的提问来源于stack exchange,提问作者chs_voks
相关产品推荐
相关产品推荐

