首页 > 编程知识 正文

java编译器安装教程,编译器和汇编器

时间:2023-05-04 23:20:41 阅读:34830 作者:1344

java语言是一种面向对象的编程语言,与c非常相似,但大大减少了相对难以理解的内容,如操作符重载、多继承和自动强制类型转换。 java语言使用引用方法而不是指针来自动管理内存,使java语言的学习相对容易。

java语言与其他语言不同,每个平台有两种完全不同的目标代码格式。 一种是可以在java虚拟机上运行的java字节码(bytecode )格式的目标文件。 另一种选择是,可以使用java字节码作为输入来生成本地可执行的目标代码。

今天需要知道的是GCC的java编译器gcj。 为什么会发明这样的编译器呢? 可以总结以下几点。

传统的JVM(Java虚拟机)太晚了,因为它解释了class文件中的bytecode。

为了优化性能,部署了JIT(just-time )。 JIT分析代码,找到调用了一定次数的方法和函数,并将该方法直接处理到程序集machine代码中。 以后可以直接运行机器代码。

传统的java还有另一个问题,部署文件很麻烦,需要多个jar文件而不是可执行文件。 而且,java需要很大的执行环境。 还有,在java和C/C之间调用的时候太晚了。

与java程序相关的文件类型:

. a :包含静态链接的目标文件的库文件

. class :目标文件。 包含可以在Java虚拟机上执行的字节码

. java:Java源文件

. o :二进制目标文件,格式与链接器匹配

. s :汇编语言的源代码

. so :包含动态链接的目标文件的共享库

1 )编译java程序

编写一个简单的Java程序。 代码如下所示。

/*test.java*/

公共班级助手

{

publicstaticvoidmain (字符串arg [ ] ) {

system.out.println(「Helloworld”);

}

}

要编译java程序,请使用以下命令:

gjmain=test-walltest.Java-o test

使用--main选项是告诉程序必须使用hello类的main ()方法作为程序的起点。 -o选项用于指定生成的文件的名称。 如果未指定,编译器将缺省生成文件名a.out。 由于文件是二进制可执行文件,因此可以任意指定文件的名称。

在java语言中,所有类都可以包含自己的主方法main (),而main ) )方法的java类可以运行。 但是在处理可执行程序时,必须明确指出独立的起点。

2 )从单个源文件到类文件

GJ编译器可以编译java源文件以生成. class文件,即类文件。 我们知道类文件可以在java虚拟机上运行。 使用上面的test.java文件生成类文件test.class,编译命令如下所示:

gcj -c -Wall test.java

注意:编译时请勿连用-o选项和-c选项。 这确保了输出的. class文件和输入的. java文件的文件名相同。 编写的类必须包含公共静态语音主(public static void main ) )方法,以便虚拟机可以使用以下命令运行此程序:

用于在java虚拟机上运行程序的命令包括:

gij测试

请注意,在虚拟机上运行时,可以不使用. class扩展名,而是使用gij和类文件的文件名。

3 )从源文件到二进制可执行文件的编译过程

当gcj编译源文件时,可以使用-c选项禁止链接操作并生成二进制目标文件。 这种二进制目标文件可以通过链接可执行文件和静态库文件来生成。 按以下方式使用:

gcj -c test.java

上述命令可以生成二进制目标文件test.o。 也可以使用-o选项指定要生成的可执行文件的名称,如下所示:

gcj -c test.java -o test

4 )编译java多文件

如果要编译多个java源文件以生成二进制可执行文件,请分别编译每个源文件,然后指定包含main ()方法的源文件,最后将它们链接在一起以生成可执行文件。 实例:

/*Hello.java*/

公共班级助手{

publicstaticvoidmain (字符串arg [ ] ) {

SayHello hello=new SayHello (;

Hello.add(「Ni”);

Hello.add(「Hao”);

Hello.add(「ma”);

Say say=new Say (;

say.speak (;

}

}

/*SayHello.java*/

公共类say hello {

私有字符串str=“”;

publicstaticvoidadd (字符串新世界)。

if(str.length0) )。

str=”;

str=新世界;

}

公共字符串字符串

返回(str;

}

}

/*Say.java*/

公共类say {

私有字符串;

say(stringstr ) {

string=str

}

公共void speak () }

system.out.println (字符串;

}

}

通常,将所有源文件编译为目标文件,然后链接生成可执行文件。 具体命令如下。

gcj -c Hello.java

gcj -c SayHello.java

gcj -c Say.java

gjmain=hello hello.osayhello.osay.o-osayhello

通过运行上述命令,可以获得最终的目标文件sayhello。 当然,这些命令也可以组合在一个命令中实现,如下所示:

gjmain=hello hello.javasayhellosay.Java-osayhello

注:请记住,无论使用哪种方法,都要为包含main ()方法的程序指定类名。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。