首先,請採取下列任一做法:
如要翻譯 Java 來源檔案 (例如,Hello.java):
public class Hello {
public static void main(String[] args) {
System.out.println("hello, world");
}
}
j2objc Hello.java
translating Hello.java Translated 1 file: 0 errors, 0 warnings
如何編譯翻譯後的檔案:
j2objcc -c Hello.m
j2objcc 是可以叫用 C 編譯器的包裝函式指令碼 (通常是 clang,也就是 LLVM、Apple 的 C/C++/Objective-C 編譯器)。如要建構執行檔:
j2objcc -o hello Hello.o
./hello Hello
hello, world
j2objcc 會轉寄您為 Objective-C 編譯器指定的任何選項。舉例來說,如要用偵錯符號轉譯及建構內容,請使用 -g
標記:
j2objcc -g -o hello Hello.m
常見問題
執行 j2objcc
時,系統指出找不到「Foundation/Foundation.h」,
如果系統找不到 Foundation/Foundation.h,導致編譯失敗,問題在於系統找不到 iOS SDK (這就是標頭的位置)。
- 確認您已安裝 Xcode。
- 執行
xcode-select --install
以安裝指令列工具。 - 執行
xcodebuild -showsdks
,應該顯示至少一個適用於 OS X、iOS 和 iOS 模擬器的 SDK。 - 如果失敗,請刪除 Xcode 應用程式,然後前往步驟 1。
j2objcc
會採用哪些標記?
j2objcc
指令碼只是 Objective-C 編譯器 clang 的包裝函式。
執行 man cc
或 man clang
以列出選項。
使用 j2objcc
編譯時,找不到專案的標頭 (.h) 檔案。
編譯器必須使用 -I <directory>
取得翻譯後檔案的目錄位置。因此,如果檔案是透過 j2objc -d foo/bar ...
產生,則 j2objcc
指令需要 -Ifoo/bar
。如果在 j2objc
指令中未指定輸出目錄,則必須新增 -I.
。
如何在 Windows 或 Linux 上執行?
J2ObjC 是在 Mac OS X 上開發的 iOS 工具,您無法編譯任何已翻譯的程式碼,因為 Apple 需要 Apple 的 OS X 或 iOS SDK,而該 SDK 的 SDK 只能在 Mac 上使用。
然而,由於 J2ObjC 翻譯工具是純粹的 Java,因此可以在其他系統上進行轉譯。在 Linux 中,j2objc
指令碼應保持不變。Windows 用途需要 CygWin 或直接叫用 Java。如要在不使用 j2objc 指令碼的情況下叫用翻譯工具,請在下列其中使用 J2OBJC_DIR
做為解壓縮 J2ObjC 發布檔案的目錄:
java -Xbootclasspath:\lib\jre_emul.jar -jar J2OBJC_DIR\lib\j2objc.jar [j2objc-flags] [source files]