如何包含库 .h 文件

How are the libraries .h files included

我已经从简单的 Dagger-2 代码成功生成了 Objc .m 和 .h 文件。

https://gist.github.com/OscarRyz/ffd976fcae9acf87dbe1

现在我正在尝试使用 j2objcc 编译这些文件,但错误消息说找不到 Dagger-2 的 .h 类:

j2objcc  -c  -I. `find app -name *.m`
In file included from app/DaggerSearchComponent.m:10:
./app/SearchInPage_Factory.h:10:10: fatal error: 'dagger/internal/Factory.h' file not found
#include "dagger/internal/Factory.h"
         ^
1 error generated.
app/SearchComponent.m:11:10: fatal error: 'dagger/Component.h' file not found
#include "dagger/Component.h"
         ^
1 error generated.
In file included from app/SearchInPage_Factory.m:8:
./app/SearchInPage_Factory.h:10:10: fatal error: 'dagger/internal/Factory.h' file not found
#include "dagger/internal/Factory.h"
         ^
1 error generated.
In file included from app/SearchInPage_MembersInjector.m:9:
./app/SearchInPage_MembersInjector.h:10:10: fatal error: 'dagger/MembersInjector.h' file not found
#include "dagger/MembersInjector.h"
         ^
1 error generated.
app/SearchModule.m:10:10: fatal error: 'dagger/Module.h' file not found
#include "dagger/Module.h"
         ^
1 error generated.
In file included from app/SearchModule_ProvideHostFactory.m:8:
./app/SearchModule_ProvideHostFactory.h:10:10: fatal error: 'dagger/internal/Factory.h' file not found
#include "dagger/internal/Factory.h"
         ^
1 error generated.
In file included from app/SearchModule_ProvideHttpClientFactory.m:9:
./app/SearchModule_ProvideHttpClientFactory.h:10:10: fatal error: 'dagger/internal/Factory.h' file not found
#include "dagger/internal/Factory.h"
         ^
1 error generated.

问题:这是否意味着我需要在生成 ObjC 代码时拥有库源代码,以便也可以生成这些代码的 .h?

Original answer from @tabll

Dagger 未随 j2objc 一起分发,因此您必须自己构建它。为此(需要 Maven,在 Building J2ObjC wiki 中有描述):

git clone https://github.com/google/dagger.git
cd dagger
mvn install
j2objc -d build -classpath $J2OBJC_HOME/lib/javax-inject.jar -sourcepath core/src/main/java `find core/src/main/java -name *.java`
cd build
j2objcc -c -I. `find dagger -name *.m`
ar -r libdagger.a *.o

备注: 指定 J2OBJC_HOME 解压缩 j2objc 分发的位置,或者如果构建 j2objc,则指定其 dist 目录。要进行测试,"ls $J2OBJC_HOME/j2objc" 应该列出 j2objc 脚本。

这些指令生成 macosx 架构,在测试时很有用。需要为您要使用的每个体系结构重新编译文件——最简单的方法是在 Xcode 中创建一个静态库项目,添加翻译后的文件,然后将此项目包含在您的应用程序中并添加它作为您应用程序的依赖项。

ar 会警告 "libdagger.a(package-info.o) has no symbols",可以忽略,因为它没有任何符号。