2

gcj (Cygwin バージョン) を使用して 2 つの Java ファイルをコンパイルします

$ gcj --version gcj (GCC) 3.4.4 (cygming スペシャル、gdc 0.12、dmd 0.125 を使用) Copyright (C) 2004 Free Software Foundation, Inc. これはフリー ソフトウェアです。条件のコピーについてはソースを参照してください。保証はありません。商品性や特定の目的への適合性のためでさえありません。

ここに私の2つのJavaファイルがあります:

$ 猫 MyClass.java

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

$ cat 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
4

1 に答える 1

3

.o にコンパイルする場合、リンケージ モデルは基本的に C に似ています。すべてのファイルをコンパイルする必要があります。したがって、それぞれを .o にコンパイルし、結果をリンクします。

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

バイナリ互換性 ABI が導入された後のバージョンの gcj では、この規則にはいくつかの例外があります。上記は、それを機能させるための最も基本的な方法です。

于 2013-06-01T19:21:26.203 に答える