JDKのインストールにどのような問題がありますか?

JDKのインストールにどのような問題がありますか?

JavaでHello Worldの例をコンパイルしようとすると、gccエラーが発生します。私が理解したところ、gccは私のJavaクラスをコンパイルしようとしています(そして何らかの理由でデフォルトのメソッドを見つけることができませんでしたが、それはポイントではありません)。

私はopenSUSE 12.1 64ビットとJDK 1.7(Oracleのrpmからインストール)を使用しています。私の/usr/java/jdk1.7.0_04/bin/:/usr/java/jdk1.7.0_04/$ PATHにあります。 Javaファイルをコンパイルしようとすると、次の結果が表示されます。

rumtscho@bradbury:/tmp> javac Hello.java
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64/crt1.o: 
In function `_start':
/home/abuild/rpmbuild/BUILD/glibc-2.14.1/csu/../sysdeps/x86_64
/elf/start.S:109: undefined reference to `main'

なぜこれが起こり、問題を解決するには?

私の$PATH全体は次のようになります。

rumtscho@bradbury:/tmp> echo $PATH
/home/rumtscho/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:.:/home/rumtscho/bin:/home/rumtscho/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/home/rumtscho/android-sdk-linux/tools:/home/rumtscho/android-sdk-linux/platform-tools:/usr/java/jdk1.7.0_04/bin/:/usr/java/jdk1.7.0_04/:/home/rumtscho/bin:/home/rumtscho/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/home/rumtscho/android-sdk-linux/tools:/home/rumtscho/android-sdk-linux/platform-tools:/usr/java/jdk1.7.0_04/bin/:/usr/java/jdk1.7.0_04/

ベストアンサー1

$PATHこのコマンドは、リストされた順序でディレクトリを検索します。あなたの説明によると、aはGCC Javaコンパイラ(またはそれへのシンボリックリンク)である可能性が高いです/home/rumtscho/bin/javac/usr/local/bin/javac/usr/bin/javac

SuSEには、複数の実装を含むプログラムを処理する「代理」メカニズムがあります。 ~によるとJava インストールの SuSE ドキュメント、SuSEのJavaパッケージはこのメカニズムを使用します。 Oracleパッケージがこのインタフェースに準拠している場合は、次を実行します。

update-alternatives --config javac

java好みのJavaコンパイラを選択してください(一致するランタイム環境を選択するには同じことを行う必要があります)。

Oracleバイナリがリストに記載されていない場合は、手動で切り替えることができます。

ln -snf /usr/java/jdk1.7.0_04/bin/{java,javac} /etc/alternatives/

javacまたは(代替方法が機能する場合は推奨されません)、ディレクトリ~/bin(ユーザー固有の設定)または(システム全体の設定)/usr/local/binで目的の項目へのシンボリックリンクを作成できます。

ln -s ../../java/jdk1.7.0_04/bin/javac /usr/local/bin

PATH別のアプローチは、Oracle JDKディレクトリを最初に含めるように順序を変更することです。既に存在する場合は、~/.profile重複する項目を避けるために削除することができます(終了時にコマンドを見つけるか、そうでないコマンド名を見つけるときを除く)、速度の低下以外は無害です。/usr/java/jdk1.7.0_04/binPATH$PATH$PATH

prepend_to_path () {
  PATH=":$PATH:"
  case "$PATH" in
    *":$1:"*) PATH="${PATH%%":$1:"*}:${PATH#*":$1:"}";;
  esac
  PATH="$1${PATH%:}"
}
prepend_to_path /usr/java/jdk1.7.0_04/bin

おすすめ記事