j2objc Xcode 构建规则,不识别导入
j2objc Xcode build rules, not recognizing imports
我正在使用 j2objc 编译和使用 iOS 中的 java 库。我遵循了流程:
在我开始导入 header 文件以使用它们之前,我没有收到任何构建错误:
#import "org/library/Class.h"
找不到文件。我缺少什么?
另一方面,我尝试使用手动翻译的库文件(使用终端 j2objc 命令)。如果我将 .h 和 .m 文件放入 j2objc-dist/include 文件夹,它们会被编辑器识别,我可以使用 类 而不会出现编译错误。但是,当我尝试构建项目时,它发现 _OBJ_CLASS_$_Java 类型的错误。我试图将文件包含到 Xcode 中的编译列表中,并验证了 libjre_emul.a 的路径,但我仍然收到错误。
我的库包含包,因此它在树中有多个文件夹。
我的偏好是使用第一种方法(原始 Java 来源)
JAVA 源案例的数据:
- 构建规则:
Java 源文件
自定义脚本:
/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/j2objc -d ${DERIVED_FILES_DIR} -sourcepath ${PROJECT_DIR}/src/ ** \ --no-package-directories ${INPUT_FILE_PATH};
输出文件:
${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.h
${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.m
- 构建阶段
Link 带库的二进制文件:
libicucore.dylib
Security.framework
libz.dylib
- 构建设置
Linking - 其他 Linker 标志:
-ljre_emul -L /Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib -force_load /Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib/libjre_emul.a -l jre_emul -ObjC
搜索路径 - 图书馆搜索路径:
/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib
搜索路径 - 用户 Header搜索路径:
/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/include
我的 java 库文件在 Project_root/src 中。树看起来像这样:
root/
src/
org/
orekit/
data/
time/
...
apache/
...
在我的 ViewController.m 文件中,我尝试使用以下行导入但没有成功(找不到文件):
#import "org/orekit/data/DataProvidersManager.h"
Xcode 假定所有源都在顶级目录中,因此您描述的导入失败。如 Xcode-Build-Rules 页面所述,需要 --no-package-directories
标志,因为它将所有生成的文件输出到没有子目录的指定构建目录,并生成正确的 #import 指令。
演示包含 Java 源和包的示例项目是 j2objc-sample-reversi. Its UI sucks (I wrote it, sigh), but the game engine is decent; if you need a tougher opponent, crank up the engine strength here。
我正在使用 j2objc 编译和使用 iOS 中的 java 库。我遵循了流程:
在我开始导入 header 文件以使用它们之前,我没有收到任何构建错误:
#import "org/library/Class.h"
找不到文件。我缺少什么?
另一方面,我尝试使用手动翻译的库文件(使用终端 j2objc 命令)。如果我将 .h 和 .m 文件放入 j2objc-dist/include 文件夹,它们会被编辑器识别,我可以使用 类 而不会出现编译错误。但是,当我尝试构建项目时,它发现 _OBJ_CLASS_$_Java 类型的错误。我试图将文件包含到 Xcode 中的编译列表中,并验证了 libjre_emul.a 的路径,但我仍然收到错误。
我的库包含包,因此它在树中有多个文件夹。 我的偏好是使用第一种方法(原始 Java 来源)
JAVA 源案例的数据:
- 构建规则:
Java 源文件 自定义脚本:
/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/j2objc -d ${DERIVED_FILES_DIR} -sourcepath ${PROJECT_DIR}/src/ ** \ --no-package-directories ${INPUT_FILE_PATH};
输出文件:
${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.h
${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.m
- 构建阶段
Link 带库的二进制文件:
libicucore.dylib
Security.framework
libz.dylib
- 构建设置
Linking - 其他 Linker 标志:
-ljre_emul -L /Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib -force_load /Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib/libjre_emul.a -l jre_emul -ObjC
搜索路径 - 图书馆搜索路径:
/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib
搜索路径 - 用户 Header搜索路径:
/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/include
我的 java 库文件在 Project_root/src 中。树看起来像这样:
root/
src/
org/
orekit/
data/
time/
...
apache/
...
在我的 ViewController.m 文件中,我尝试使用以下行导入但没有成功(找不到文件):
#import "org/orekit/data/DataProvidersManager.h"
Xcode 假定所有源都在顶级目录中,因此您描述的导入失败。如 Xcode-Build-Rules 页面所述,需要 --no-package-directories
标志,因为它将所有生成的文件输出到没有子目录的指定构建目录,并生成正确的 #import 指令。
演示包含 Java 源和包的示例项目是 j2objc-sample-reversi. Its UI sucks (I wrote it, sigh), but the game engine is decent; if you need a tougher opponent, crank up the engine strength here。