首先,请执行以下任一操作:
如需转换 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 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]