我正在尝试使用JavaCPP为某些C ++库创建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不包含入口点,所以用nm -D X.so
查看它。如果指定“ target”属性,则输出Java类,确实看起来不错,但没有.so
。如果我忽略了target
属性,则.so已成功构建,但它没有绑定。我还看到,通过将-nodelete传递给java -jar javacpp.jar
使其保持生成的cpp文件,它们还没有得到它们-它们内部仅具有编组代码,而没有我的东西(一个类)。
JavaCPP文档是一场噩梦,而且步骤如此复杂,以至于我无法解决。也欢迎提供替代库的建议。谢谢。
答案 0 :(得分:0)
新的Mapping Recipes for C/C++ Libraries维基页面应该澄清所有这些,但是请让我知道是否还有任何不清楚的地方,我将在此处提供更多的精度。
在这种情况下,我们可以在Mpf
上调用带有@Properties(target="Client", ...)
值的JavaCPP,创建一个名为Client
的类,因此一系列命令如下所示:
$ javac -cp javacpp.jar Mpf.java
$ java -jar javacpp.jar Mpf
$ javac -cp javacpp.jar Client.java
$ java -jar javacpp.jar Client