linux 共享库中的 JNI 代码
JNI code in linux shared lib
我有一个移植到 linux 的 c++ 库。
现在我要添加一个 JNI 代码,这样我就可以添加一个 java 包装器。
问题是:
将 JNI 添加到同一个库中会影响用户的 C++ 应用程序 --> 如果 java 未安装,它可能会变得不工作......等等(因为它链接到 jni.h 中的一些代码和其他东西)?
您可能希望考虑在 C/C++ 中创建一个 JNI 包装器并静态地 link 到您当前的库。这样,您当前的库仍可用于 C/C++ 应用程序,并且您的代码将更易于调试和维护。如果您选择这条路线,您可能还想研究为您的 JNI 包装器启用 link 时间优化。或者,您也可以动态 link JNI 包装器并将两个库放在 /lib 中(或任何合适的地方),但是您将对该基础库有运行时依赖性。
如果您将JNI 添加到您的库中,它不会影响当前库。 JNI 是接口和回调的集合,使您的库可以被 JVM 使用。如果没有 JNI,您的库将无法在 JVM 中使用。
添加 JNI 后,您的库会变大,导出的符号也会更多。
通过将 JNI 添加到您当前的库,这意味着您的库可以用作普通库,同时可以从 JVM 加载。
我有一个移植到 linux 的 c++ 库。 现在我要添加一个 JNI 代码,这样我就可以添加一个 java 包装器。 问题是: 将 JNI 添加到同一个库中会影响用户的 C++ 应用程序 --> 如果 java 未安装,它可能会变得不工作......等等(因为它链接到 jni.h 中的一些代码和其他东西)?
您可能希望考虑在 C/C++ 中创建一个 JNI 包装器并静态地 link 到您当前的库。这样,您当前的库仍可用于 C/C++ 应用程序,并且您的代码将更易于调试和维护。如果您选择这条路线,您可能还想研究为您的 JNI 包装器启用 link 时间优化。或者,您也可以动态 link JNI 包装器并将两个库放在 /lib 中(或任何合适的地方),但是您将对该基础库有运行时依赖性。
如果您将JNI 添加到您的库中,它不会影响当前库。 JNI 是接口和回调的集合,使您的库可以被 JVM 使用。如果没有 JNI,您的库将无法在 JVM 中使用。
添加 JNI 后,您的库会变大,导出的符号也会更多。
通过将 JNI 添加到您当前的库,这意味着您的库可以用作普通库,同时可以从 JVM 加载。