JNI,C ++及其标准库

时间:2013-08-26 18:42:09

标签: java c++ java-native-interface

我在Java中通过JNI使用一些C ++代码。 C ++代码使用libstdc ++和libz中的一些函数。 C ++部分链接到一个共享库,而不是在不同的环境中使用该构建的库(基于Linux)。

我关心的是libstdc ++和libz版本的差异。如果我在环境A上构建了那个JNI库,而不是它可能有其他libstdc ++和libz版本的环境B和C - 它会失败吗?这是否意味着我需要静态地将这些库链接到我的JNI共享库?

P.S。 2个稍微不同的环境的第一次测试成功了,但我仍然感觉不安全。

1 个答案:

答案 0 :(得分:2)

这与C ++的非JNI使用没有什么不同。通常,库提供商努力确保向后兼容性 - 因此在大多数情况下,您的担心不是偶然发现太旧的版本。

有几种常见的选择:

  1. 依靠打包来确保您的依赖项的正确版本(例如,如果您在Linux上打包到RPM / DEB包中,则在包元数据中设置要求)。对于Mac,您通常会针对标准库定位特定的操作系统版本,并使用安装程序捆绑非标准库(libz)。我不认为你可以在Windows上默认使用libstdc ++,没有Cigwin和喜欢。
  2. 静态链接。
  3. 将共享库与您的应用程序打包。