当似乎只有一个版本的 Java 可用时,为什么我会收到 LinkageError?
Why do I get LinkageError when only one version of Java seems to be available?
这是我的Java环境:
~: java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
但是在编译后尝试执行程序时出现以下错误:
Error: LinkageError occurred while loading main class ClassName
java.lang.UnsupportedClassVersionError: ClassName has been
compiled by a more recent version of the Java Runtime
(class file version 55.0), this version of the Java Runtime
only recognizes class file versions up to 54.0
我的 PATH 和 JAVA_HOME 变量都指向这个版本的 java。我
下载了其他版本,但似乎没有在系统中注册:
update-alternatives --display java
java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1101
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
那么为什么编译和执行是不同版本的呢?
问题是 Java 的其他下载版本可以通过我的 PATH 变量访问。因此,在编译和执行我的程序时指定 javac 和 java 可执行文件的完整路径后,它就可以工作了。
当您尝试更改 java .class 文件的内容时,也会发生此错误。
字节码验证器生成此错误
例如
错误:加载main时发生LinkageError class你好
java.lang.UnsupportedClassVersionError: Hello 已经被较新版本的Java Runtime编译(class文件版本8251.8224),这个版本的Java Runtime只识别class 文件版本高达 59.0
与 update-alternatives --config javac
和 update-alternatives --config java
的 sudo 命令一起使用。所以,编译器和运行环境可以选择相同版本的java。
编译 java 程序后,我也遇到了同样的错误。
我有截图---->
我在 eclipse 中遇到这个错误:
LinkageError occurred while loading main class com.example.demo.SpringDemo1Application
java.lang.UnsupportedClassVersionError: com/example/demo/SpringDemo1Application has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 60.0
- 右键单击项目名称
- Select 属性
- select Java 编译器
- 单击恢复默认值。
- 申请并关闭。
这对我有用。
enter image description here
这是我的Java环境:
~: java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
但是在编译后尝试执行程序时出现以下错误:
Error: LinkageError occurred while loading main class ClassName
java.lang.UnsupportedClassVersionError: ClassName has been
compiled by a more recent version of the Java Runtime
(class file version 55.0), this version of the Java Runtime
only recognizes class file versions up to 54.0
我的 PATH 和 JAVA_HOME 变量都指向这个版本的 java。我 下载了其他版本,但似乎没有在系统中注册:
update-alternatives --display java
java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1101
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
那么为什么编译和执行是不同版本的呢?
问题是 Java 的其他下载版本可以通过我的 PATH 变量访问。因此,在编译和执行我的程序时指定 javac 和 java 可执行文件的完整路径后,它就可以工作了。
当您尝试更改 java .class 文件的内容时,也会发生此错误。 字节码验证器生成此错误 例如
错误:加载main时发生LinkageError class你好 java.lang.UnsupportedClassVersionError: Hello 已经被较新版本的Java Runtime编译(class文件版本8251.8224),这个版本的Java Runtime只识别class 文件版本高达 59.0
与 update-alternatives --config javac
和 update-alternatives --config java
的 sudo 命令一起使用。所以,编译器和运行环境可以选择相同版本的java。
编译 java 程序后,我也遇到了同样的错误。
我有截图---->
我在 eclipse 中遇到这个错误:
LinkageError occurred while loading main class com.example.demo.SpringDemo1Application
java.lang.UnsupportedClassVersionError: com/example/demo/SpringDemo1Application has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 60.0
- 右键单击项目名称
- Select 属性
- select Java 编译器
- 单击恢复默认值。
- 申请并关闭。
这对我有用。 enter image description here