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

관련 정보