使用入门

首先,请执行以下任一操作:

如需转换 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(也就是该头文件所在的位置)。

  1. 确保您已安装 Xcode。
  2. 运行 xcode-select --install 以安装命令行工具。
  3. 运行 xcodebuild -showsdks,这应该会显示至少一个适用于 OS X、iOS 和 iOS 模拟器的 SDK。
  4. 如果失败,请删除 Xcode 应用并转到第 1 步。

j2objcc 接受哪些标志?

j2objcc 脚本只是 Objective-C 编译器 Clang 的封装容器。运行 man ccman clang 以列出其选项。

使用 j2objcc 进行编译时,找不到项目的头文件 (.h)。

编译器需要使用 -I <directory> 知道转换后的文件所在的目录。因此,如果文件是使用 j2objc -d foo/bar ... 生成的,则 j2objcc 命令需要 -Ifoo/bar。如果在 j2objc 命令中未指定输出目录,则需要添加 -I.

如何在 Windows 或 Linux 上运行?

J2ObjC 是一款用于在 Mac OS X 上开发的 iOS 工具。您无法编译任何已翻译的代码,因为它需要 Apple OS X 或 iOS 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]