Solaris 10编译OpenJDK8遭遇shdr table truncated错误求解决
解决Solaris 10 x86编译OpenJDK8时的链接错误
从你给出的错误日志来看,核心问题集中在两个点:Solaris 10自带的老旧工具链无法兼容OpenJDK8的目标文件格式,以及dtrace相关的符号类型冲突。下面是针对性的解决步骤:
1. 替换新版binutils工具链
Solaris 10默认/usr/ccs/bin目录下的nm、ld等工具版本过于陈旧,根本无法处理OpenJDK8编译生成的现代目标文件,这就是你看到shdr table truncated格式错误的原因。既然你已经在用OpenCSW,直接安装新版binutils即可:
pkgutil -i binutils
安装完成后,把OpenCSW的bin目录放到PATH最前端,确保编译时优先调用新版工具:
export PATH=/opt/csw/bin:$PATH
可以用以下命令验证是否生效:
which nm # 预期输出:/opt/csw/bin/nm which ld # 预期输出:/opt/csw/bin/ld
2. 禁用dtrace支持(解决符号冲突)
错误日志里的符号类型冲突(比如__JvmOffsets、CodeCache::_heap),是因为Solaris 10上的dtrace逻辑和OpenJDK8的代码存在兼容性问题。在configure阶段直接禁用dtrace就能解决这个问题:
bash ./configure --disable-dtrace
3. 清理残留并重新编译
先彻底清理之前的编译产物,避免旧文件干扰新的编译流程:
gmake clean # 或者直接删除整个build目录 rm -rf /export/home/openjdk/build
然后重新执行配置和编译命令:
bash ./configure --disable-dtrace gmake all
如果还是遇到问题,可以尝试在configure时明确指定server版本--with-jvm-variants=server,同时检查OpenCSW上的依赖包是否安装完整(比如要确保freetype、cups的开发包而非仅运行时包已安装)。
内容的提问来源于stack exchange,提问作者preethi selvaraju
相关产品推荐
相关产品推荐

