我正在尝试从命令行编译一个使用 carbon 的 JNI 库。
如果我不 -I/System/.../JavaVM.Framework/Headers/,它找不到任何 jni 类型,并给出错误。
如果我只是 -I/System/.../FlatCarbon.framework/Headers 而不是“-framework Carbon”,它编译得很好,但是链接器给出了一个关于未定义符号的错误。
如果我使用 -framework Carbon 编译,它可以正常工作,但事实证明 -I.../FlatCarbon.framework/Headers/ 完全没有必要!无论有没有它,它的工作原理都是一样的。现在,到目前为止,一切都是有道理的,除了以下内容:
如果 I -framework JavaVM,但不包含头目录,则找不到 jni 类型!
这似乎完全不一致。对于一个框架,-I 是必需的,-framework 是可选的,对于另一个框架,-framework 是必需的,-I 是可选的。这是怎么回事?有人可以解释 -framework 选项的工作原理吗?JavaVM 是一个特例吗?
出于好奇,我部分发布了这个问题,但也是为了帮助其他正在寻找类似解决方案的人,因为至少在我的 google-fu 中,我无法从命令行找到任何解释框架的内容,或者如何在命令行上使用 gcc 链接到系统库。gcc --help 甚至没有记录 -framework,我能找到的一切都是关于使用 xcode 开发的。