首页 文章

JNI,C及其标准库

提问于
浏览
0

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

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

附: 2个稍微不同的环境的第一次测试成功了,但我仍然觉得这里不安全 .

1 回答

  • 2

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

    有几种常见的选择:

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

    • 静态链接 .

    • 将应用程序的共享库打包 .

相关问题