java - 如何使用 gcj 单独编译文件?

标签 java compiler-construction gcj

我使用gcj(Cygwin版本)编译2个java文件

$ gcj --版本 gcj (GCC) 3.4.4(cygming 专用,gdc 0.12,使用 dmd 0.125) 版权所有 (C) 2004 自由软件基金会, Inc. 这是免费软件;请参阅复制条件的来源。没有 保修单;甚至不是为了适销性或特定用途的适用性。

这是我的 2 个 java 文件:

$cat MyClass.java

public class MyClass {  
   public MyClass() {  
      System.out.println("Hello, MyClass");  
   }  
} 

$猫HelloWorld.java

public class HelloWorld {  
   public static void main(String[] args) {  
      MyClass myclass = new MyClass();  
      System.out.println("Hello, World");  
   }   
}

我能够执行 HelloWorld 中的代码

$ gcj.exe -o hello --main=HelloWorld --classpath=. HelloWorld.java MyClass.java

我想像这样单独编译它们

gcj.exe -C MyClass.java

然后

gcj.exe  --main=HelloWorld --classpath=. HelloWorld.java

问题是我得到

/tmp/ccKwa7F4.o: In function '_ZN10HelloWorld4mainEP6JArrayIPN4java4lang6StringEE':  
/home/lucm/HelloWorld.java:3: undefined reference to `MyClass::class$'  
/home/lucm/HelloWorld.java:3: undefined reference to `MyClass::MyClass()'  
collect2: ld returned 1 exit status

最佳答案

当编译为.o时,链接模型基本上是类似C的。您必须编译所有文件。因此,您要做的就是将每个文件编译为 .o 并链接结果:

gcj -c MyClass.java
gcj -c HelloWorld.java
gcj --main=HelloWorld MyClass.o HelloWorld.o

当引入二进制兼容性 ABI 时,此规则在 gcj 的更高版本中存在一些异常(exception)。以上是最基本的实现方法。

关于java - 如何使用 gcj 单独编译文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166532/

相关文章:

java - 使用一个简单的命令从命令行将一堆 .Java 文件转换为 .Jar 文件

java - 在编译期间如何使用 GCJ 将两个 Java 文件链接在一起?

c# - 如何在 Mono 开发(Ubuntu、Linux)中将 Saltarelle C# 设置为 JavaScript 编译器

c++ - 条件运算符 (>?=) 的奇怪用法

java - 如何让java编译器将变量名插入字符串

java - 为什么 GCJ 找不到我导入的包中的类?

java - Android 存储数据的策略

java - 如何在 Swing 中绘制布局单元格及其边缘?

java - 按值从数组列表中删除

java - try catch会降低效率吗?