大家好日子! 我写了简单的程序:
import java.lang.System;
public class hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
如果在本地服务器上运行它,这可以正常工作。但是,当我像这样远程访问这个程序时,我面临着问题:
ssh remote_machine "java hello"
我得到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: hello
at gnu.java.lang.MainThread.run(libgcj.so.7rh)
Caused by: java.lang.ClassNotFoundException: hello not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(libgcj.so.7rh)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
at gnu.java.lang.MainThread.run(libgcj.so.7rh)
我发现这是因为jvm版本和代码编译java版本的不兼容性。 由于我创建并编译了机器使用java 1.5的代码,但是当我远程访问它时,它正在使用java 1.4通过" gij(GNU libgcj)版本4.1.2 20080704&#34 ;
问题:是否可以通过" gij(GNU libgcj)版本4.1.2 20080704"当我远程访问它时使用最初使用的java版本?
答案 0 :(得分:0)
除了控制代码生成的许多gcc选项,gcj 有几种特定于自身的选择。
- -C 此选项用于告诉gcj生成字节码(.class文件)而不是目标代码。
...
- -ftarget = VERSION 这可以与-C一起使用来选择gcj发出的字节码版本。默认值为“1.5”。当不生成字节码时,这个 选项无效。
因此,您可以使用-C
和ftarget=1.4
选项为1.4版生成字节码