【问题标题】:Building openjdk7 for Itanium64 on Suse Enterprise Linux Server在 Suse Enterprise Linux 服务器上为 Itanium64 构建 openjdk7
【发布时间】:2012-06-27 16:15:00
【问题描述】:

我在运行 Suse Linux Enterprise Server 11 SP2 的安腾服务器上构建 openjdk7 时遇到了一些棘手的问题。

我已经成功安装了 Sun JDK 1.6 update 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 忽略架构就好了。

当它在 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,为什么不能构建?

【问题讨论】:

    标签: java compilation openjdk itanium


    【解决方案1】:

    我最近才偶然发现这个(仍然悬而未决的)问题,最近几个月尝试过类似的事情;并且也遇到(并解决了)同样的问题。

    '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-support 系统的一些 HotSpot/OpenJDK 构建配置组件的问题,这些组件是指定所有架构资格以在 Linux Itanium/ 上定位/处理所需的“.ad”文件所必需的。 IA64 架构。具体来说,您缺少正确文件名扩展所需的某些关键定义:[...]/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' 中不存在(疏忽?)。简单回顾一下 linux 下的其他平台文件,你应该看到'arch_model'应该取'arch'的值,ia64,类似地,'@987654336 @' 与 '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 源中删除的另一个源区域的构建过程失败了......)祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 2021-01-23
      • 1970-01-01
      • 2011-02-07
      • 2015-04-23
      • 2019-02-28
      • 2013-02-06
      • 2019-06-15
      相关资源
      最近更新 更多