GCC编译java
发布时间:2020-12-15 17:30:01 所属栏目:百科 来源:网络整理
导读:java 语言是一门面向对象的编程语言,与 C++ 很相似,但是减少了很多相对来说比较难以理解的东西,例如操作符的重载、多继承、自动的强制类型转换等。java 语言中不使用指针,而是使用引用的方式,并且可以帮助我们自动管理内存,所以学习 java 语言会相对容
java 语言是一门面向对象的编程语言,与 C++ 很相似,但是减少了很多相对来说比较难以理解的东西,例如操作符的重载、多继承、自动的强制类型转换等。java 语言中不使用指针,而是使用引用的方式,并且可以帮助我们自动管理内存,所以学习 java 语言会相对容易。 ? java 语言和其他语言是有区别的,它对每个平台都有两种完全不同的目标代码格式,一种是 java 字节码(bytecode)格式的目标文件,可以在 java 的虚拟机中运行;另一种是可以将 java 字节码作为输入,生成本地的可执行的目标代码。 ? 我们今天需要了解的是 GCC 中的 java 编译器 gcj,为什么要发明出来这样一种编译器呢?可以总结出以下几点:
与 java 程序相关的文件类型:
1) 编译java程序编写一个简单的 Java 程序,代码展示如下:/*test.java*/ public class Hello { public static void main(String arg[]){ System.out.println(“hello world”); } }编译 java 程序使用如下命令: gcj –main=test -Wall test.java -o test 使用“--main”选项是告诉程序必须使用 hello 类中的 main() 方法作为程序的起点。-o 选项是为了指定生成文件的名字。如果不指定,编译器默认生成文件名为a.out。因为文件是二进制的可执行文件,所以文件的名称可以任意指定。java 语言允许所有的类都包含自己的主方法 main(),包含 main() 方法的 Java 类都可以运行。但在处理可执行程序时,必须明确指出独立的起点。 2) 单一的源文件到类文件gcj 编译器可以编译 java 源文件生成 .class 文件,也就是类文件,我们都知道类文件可以在 java 虚拟机上运行。使用上面的 test.java 文件生成类文件test.class,编译命令如下:gcj -c -Wall test.java
注意:编译时 gij test 在虚拟机中运行的时候要注意,文件不用添加 .class 后缀名,直接使用 gij 加上类文件的文件名就可以。3) 从源文件到二进制可执行文件的编译过程gcj 编译源文件的时候可以使用-c 选项禁止链接操作,并且产生二进制目标文件,这样的二进制目标文件既可以链接生成可执行文件,又可以制作静态库文件。使用方式如下:
gcj -c test.java 上面的命令可以生成二进制目标文件 test.o,同时也可以使用-o选项指定生成的可执行文件的名字,使用如下:gcj -c test.java -o test 4) java多文件编译将多个java源文件编译生成二进制可执行文件时,要分别编译每一个源文件,然后通过指出包含 main() 方法的源文件,最终将它们链接生成一个可执行文件。实例:/*Hello.java*/ public class Hello{ public static void main(String arg[]){ SayHello hello = new SayHello(); hello.add(“ni”); hello.add(“hao”); hello.add(“ma”); Say say = new Say(); say.speak(); } } /*SayHello.java*/ public class SayHello{ private String str = “”; public static void add(String newworld){ if(str.length > 0) str+=” ”; str += newworld; } public String toString(){ return (str); } } /*Say.java*/ public class Say{ private String string; Say(String str){ string = str } public void speak(){ System.out.println(string); } }我们通常使用的方法是将所有的源文件编译成目标文件,然后链接生成可执行文件,具体的命令使用如下:
gcj -c Hello.java gcj –main=Hello Hello.java SayHello Say.java -o sayhello 注意:无论使用这两种方法中的哪一种,都不要忘指定包含 main() 方法的程序的类名。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |