1

Suse Linux Enterprise Server 11 SP2 を実行している Itanium サーバーで 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.packjsse.jarましたjdk/jre/bin

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 とは何ですか? なぜビルドされないのですか?

4

1 に答える 1

1

私は最近、この(まだ未解決の)質問に出くわしたばかりで、ここ数か月で同様のことを試みました。また、同じ問題に遭遇(および解決)しました。

「adlc」は、HotSpot の Architecture Description Language Compiler、すなわち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 ソース ツリーから削除されており、ビットが削除されているか、積極的に削除されています (および/または維持されていませんか?)。具体的には、これは、サポート システムの一部の HotSpot/OpenJDK ビルド構成コンポーネントの問題でありMakefile、'.ad' Linux Itanium/IA64 アーキテクチャで必要なファイル。具体的には、正しいファイル名展開に必要な特定の重要な定義が欠落しています: ファイル/ターゲットの完全にアーキテクチャ的に修飾された名前が明らかに正しくありません (したがって、見つかりません) [...]/cpu/ia64/vm/.ad../generated/adfiles/linux_.ad

上記のファイル/ターゲットの適切な名前は、実際には です../generated/adfiles/linux_ia64.ad。これは、ターゲット名の環境変数の置換によって発生しますが、の定義が欠落しています${arch_model}(同様の状況が別の envvar で提示されます${os_arch_model})。platform_ia64これらは、 の ' linux' ディレクトリの' 'にありません (見落としですか?) [JDK_distribution]/hotspot/make。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 ソースから削除されたソースの別の領域のビルド プロセスに後で失敗します...) 幸運を祈ります!

于 2014-10-14T13:57:13.213 に答える