[英]Building openjdk7 for Itanium64 on Suse Enterprise Linux Server
我在运行Suse Linux Enterprise Server 11 SP2的Itanium服务器上构建openjdk7时遇到了一个棘手的问题。
我已经成功安装了Sun JDK 1.6更新33来作为安装的引导程序。 而且,我已经下载了源代码,并将openJDK7安装源解压缩到一个目录中。 我的构建通过了所有make sanity
检查,看起来可以使用了。
我未设置JAVA_HOME,声明为LANG = C,并将构建指向引导JDK。
然后我调用make ALLOW_DOWNLOADS=false ALT_BOOTDIR=/usr/java/jdk1.6.0_33 ALT_DROPS_DIR=~/openjdk_src/sourcedrop
构建可以正常运行约5-10分钟,然后出现一连串关于找不到SSL库的错误。
这发生在jaxws源代码树的构建的以下部分中,并且似乎与SSL有关:
[javac] Compiling 2735 source files to /root/openjdk_src/openjdk/build/linux-ia64/jaxws/build/classes
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/DOMForest.java:54: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HttpsURLConnection;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/DOMForest.java:55: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HostnameVerifier;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/DOMForest.java:56: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.SSLSession;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:54: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HostnameVerifier;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:55: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HttpsURLConnection;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:56: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.SSLSession;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:218: error: cannot find symbol
[javac] private static class HttpClientVerifier implements HostnameVerifier {
[javac] ^
[javac] symbol: class HostnameVerifier
[javac] location: class MetadataFinder
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:219: error: cannot find symbol
[javac] public boolean verify(String s, SSLSession sslSession) {
[javac] ^
[javac] symbol: class SSLSession
[javac] location: class HttpClientVerifier
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/developer/JAXWSProperties.java:32: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HostnameVerifier;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/developer/JAXWSProperties.java:33: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HttpsURLConnection;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/developer/JAXWSProperties.java:34: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.SSLSocketFactory;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:39: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.SSLSocketFactory;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:40: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HttpsURLConnection;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:41: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.HostnameVerifier;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:42: error: package javax.net.ssl does not exist
[javac] import javax.net.ssl.SSLSession;
[javac] ^
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:302: error: cannot find symbol
[javac] private static class HttpClientVerifier implements HostnameVerifier {
[javac] ^
[javac] symbol: class HostnameVerifier
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:303: error: cannot find symbol
[javac] public boolean verify(String s, SSLSession sslSession) {
[javac] ^
[javac] symbol: class SSLSession
[javac] location: class HttpClientVerifier
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:154: error: cannot find symbol
[javac] if (conn instanceof HttpsURLConnection) {
[javac] ^
[javac] symbol: class HttpsURLConnection
[javac] location: class WSEntityResolver
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/tools/internal/ws/wsdl/parser/MetadataFinder.java:156: error: cannot find symbol
[javac] ((HttpsURLConnection) conn).setHostnameVerifier(new HttpClientVerifier());
[javac] ^
[javac] symbol: class HttpsURLConnection
[javac] location: class WSEntityResolver
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:207: error: cannot find symbol
[javac] if (httpConnection instanceof HttpsURLConnection) {
[javac] ^
[javac] symbol: class HttpsURLConnection
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:223: error: cannot find symbol
[javac] ((HttpsURLConnection) httpConnection).setHostnameVerifier(new HttpClientVerifier());
[javac] ^
[javac] symbol: class HttpsURLConnection
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:227: error: cannot find symbol
[javac] HostnameVerifier verifier =
[javac] ^
[javac] symbol: class HostnameVerifier
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:228: error: cannot find symbol
[javac] (HostnameVerifier) context.invocationProperties.get(JAXWSProperties.HOSTNAME_VERIFIER);
[javac] ^
[javac] symbol: class HostnameVerifier
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:230: error: cannot find symbol
[javac] ((HttpsURLConnection) httpConnection).setHostnameVerifier(verifier);
[javac] ^
[javac] symbol: class HttpsURLConnection
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:234: error: cannot find symbol
[javac] SSLSocketFactory sslSocketFactory =
[javac] ^
[javac] symbol: class SSLSocketFactory
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:235: error: cannot find symbol
[javac] (SSLSocketFactory) context.invocationProperties.get(JAXWSProperties.SSL_SOCKET_FACTORY);
[javac] ^
[javac] symbol: class SSLSocketFactory
[javac] location: class HttpClientTransport
[javac] /root/openjdk_src/openjdk/build/linux-ia64/jaxws/drop/jaxws_src/src/com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.java:237: error: cannot find symbol
[javac] ((HttpsURLConnection) httpConnection).setSSLSocketFactory(sslSocketFactory);
[javac] ^
[javac] symbol: class HttpsURLConnection
[javac] location: class HttpClientTransport
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 27 errors
要解决此问题,我将jsse.pack
解压缩到jdk/jre/bin
中的jsse.jar
中。
然后,如果我记得使用make ALLOW_DOWNLOADS=false ALT_BOOTDIR=/usr/java/jdk1.6.0_33 ALT_DROPS_DIR=~/openjdk_src/sourcedrop DISABLE_HOTSPOT_OS_VERSION_CHECK=ok
可以make ALLOW_DOWNLOADS=false ALT_BOOTDIR=/usr/java/jdk1.6.0_33 ALT_DROPS_DIR=~/openjdk_src/sourcedrop DISABLE_HOTSPOT_OS_VERSION_CHECK=ok
地忽略体系结构。
当在VM中建立adlc时,构建便会失败:
Making adlc
g++ -Wl,-relax -Xlinker -O1 -Xlinker -export-dynamic -o ../generated/adfiles/adlc
../generated/adfiles/adlparse.o ../generated/adfiles/arch Desc.o
../generated/adfiles/arena.o ../generated/adfiles/dfa.o ../generated/adfiles/dict2.o
../generated/adfiles/filebuff.o ../generated/adfil es/forms.o
../generated/adfiles/formsopt.o ../generated/adfiles/formssel.o
../generated/adfiles/main.o
../generated/adfiles/adlc-opcodes.o ../ generated/adfiles/output_c.o
../generated/adfiles/output_h.o
make[6]: *** No rule to make target
`/root/openjdk_src/openjdk/hotspot/src/cpu/ia64/vm/.ad', needed by
`../generated/adfiles/linux_.ad'. Stop .
怎么办? 什么是adlc,为什么不建立?
我最近才偶然发现这个问题(仍然悬而未决),最近几个月我曾尝试过类似的尝试。 并且也遇到(并解决了)相同的问题。
ADLC. “ adlc”是HotSpot的体系结构描述语言编译器, ADLC。 它用于生成HotSpot构建的Java执行引擎(解释器和JIT编译器)的源代码。 基于处理“ .ad
”文件。 如果并且当您构建ADLC工具时,其“用法”如下所示:
$> ./adlc
Architecture Description Language Compiler
Usage: adlc [-doqwTs] [-#]* [-D<FLAG>[=<DEF>]] [-U<FLAG>] [-c<CPP_FILE_NAME>] [-h<HPP_FILE_NAME>] [-a<DFA_FILE_NAME>] [-v<GLOBALS_FILE_NAME>] <ADL_FILE_NAME>
d produce DFA debugging info
o no output produced, syntax and semantic checking only
q quiet mode, supresses all non-essential messages
w suppress warning messages
T make DFA as many subroutine calls
s output which instructions are cisc-spillable
D define preprocessor symbol
U undefine preprocessor symbol
c specify CPP file name (default: (null))
h specify HPP file name (default: (null))
a specify DFA output file name
v specify adGlobals output file name
# increment ADL debug level
您的构建问题是您无法避免“架构”检测! (实际上,甚至可能怀疑您使用“ DISABLE_HOTSPOT_OS_VERSION_CHECK = ok”。)但是,它比(仅仅是)更糟糕:IA64(与Windows分开,直到Windows Server 2008 R2结束(扩展)支持)...直到2020年?)已从Java 7 OpenJDK源树中删除,并且位已删除/正在主动删除(和/或未维护?)。 具体地说,这就是Makefile
支持系统的某些HotSpot / OpenJDK构建配置组件所要解决的问题,该组件必须指定所有体系结构资格来定位/处理Linux Itanium / IA64体系结构上所需的“ .ad
”文件。 具体来说,您缺少正确的文件名扩展所需的某些关键定义: [...]/cpu/ia64/vm/.ad
和../generated/adfiles/linux_.ad
是不正确的,在结构上完全符合标准文件/目标(因此未找到)。
上面涉及的文件/目标的实际名称实际上是../generated/adfiles/linux_ia64.ad
,它是通过目标名称中的环境变量替换来实现的,但是缺少${arch_model}
定义(类似的情况)呈现另一个envvar, ${os_arch_model}
)。 [JDK_distribution]/hotspot/make
的“ linux
”目录下的“ platform_ia64
”中没有这些(是(忽略)?)。 ia64
, and similarly, ' os_arch_model
' takes the same value as ' os_arch
', linux_ia64
. 其他平台的文件在linux下的简要回顾,你应该看到,“ arch_model
”应采取“价值arch
”, ia64
,同样,“ os_arch_model
”采用相同的值是“ os_arch
”, linux_ia64
。
[Java7 JDK distribution]/hotspot/make $ cat platform_ia64
os_family = linux
arch = ia64
arch_model = ia64 # Added
os_arch = linux_ia64
os_arch_model = linux_ia64 # Added
lib_arch = ia64
compiler = gcc
gnu_dis_arch = ia64
sysdefs = -DLINUX -D_GNU_SOURCE -DIA64 -DCC_INTERP
mark_style = alignment
仅通过该修改/修正,您就可以成功完成OpenJDK构建的这些初始步骤。 (我可以通过ADLC构建,但是稍后在另一个源区域中从后来的IA64源中删除的构建过程失败了。)祝您好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.