linux中的JNI代码共享lib

时间:2015-01-27 18:06:29

标签: linux java-native-interface

我有一个移植到linux的c ++库。 现在我添加了一个JNI代码,这样我就可以添加一个java包装器了。 问题是: 将JNI添加到同一个lib会影响用户的c ++应用程序 - >如果没有安装java等等,它可能会失效吗(因为它链接到jni.h中的一些代码和其他东西)?

2 个答案:

答案 0 :(得分:1)

如果将JNI添加到库中,它将不会影响当前库。 JNI是接口和回调的集合,使JVM可以使用您的库。如果没有JNI,您的库就无法在JVM中使用。

当您添加JNI时,您的库将会变大,并且会导出更多符号。

通过将JNI添加到当前库,这意味着您的库可以用作普通库,同时可以从JVM加载。

答案 1 :(得分:0)

您可能希望考虑使用C / C ++创建JNI包装器并静态链接到当前库。这样,您当前的库仍将适用于C / C ++应用程序,您的代码将更易于调试和维护。如果选择此路由,您可能还需要考虑为JNI包装器启用链接时优化。或者,您也可以动态链接JNI包装器并将两个库放在/ lib中(或者适当的地方),但是您将对该基本库具有运行时依赖性。