我正在尝试使用 JavaCPP 为某些 C++ 库创建 java 绑定。过程有2个方面
- 需要构建一个 linux 共享库 (.so),其中包含本机入口点 (JNIEXPORT)。碰巧我的库只是标题,所以我只是将包含传递给 JavaCPP
- 需要使用使用“native”关键字的方法生成 java 类,其签名对应于本地端的签名
Java“属性”文件(描述如何构建 .so 以及如何生成 Java 文件的部分)如下所示:
@Properties(
//target = "Client", // NOTE: with this commented, .so gets built; with it enabled, Java class gets written
value = @Platform(
includepath = {"jnigen/src/main/cpp/mpf"},
include = "ClientWrapper.hpp"
)
)
public class Mpf implements InfoMapper {
public void map(InfoMap infoMap) {
infoMap.put(new Info("mpf::ClientWrapper").pointerTypes("Client"));
}
}
问题是,我无法终生生成 C++ 绑定。我知道是因为 .so 不包含入口点,所以用 .so 来查看它nm -D X.so
。如果我指定一个“目标”属性,Java 类就会被输出,这看起来不错,但没有.so
. 如果我省略target
属性,则 .so 已成功构建,但它没有 bindings。我还看到它没有得到它们,通过将 -nodelete 传递给它,java -jar javacpp.jar
因此它保留了生成的 cpp 文件 - 它们只有内部编组代码,而不是我的东西(一类)。
JavaCPP 文档是一场噩梦,步骤如此纠缠,我无法解决。也欢迎对替代库提出建议。谢谢。