首页 > 解决方案 > JNI 加载用 c++11 编译的 .so 文件出现错误“/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found”

问题描述

我用 gcc 4.8.2(这是 c++11 版本,我的 C++ 代码需要它)编译了 C++ 代码并生成了一个libmy.so文件。我想libmy.so用 JNI 从 Java 代码中调用方法,并且我已经设置LD_LIBRARY_PATHlibmy.so. 运行 Java 代码时,错误信息如下:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:.../libmy.so:/usr/lib64/libstdc++.so.6:未找到版本“GLIBCXX_3.4.18”(libmy.so 需要)

因为这个Linux机器是常用的,所以我不想修改/usr/lib64中的文件(例如,修改链接libstdc++.so.6)。

顺便说一句,我的JDK版本是1.8,我试过JDK 1.11,它也失败了。

似乎 Java 无法加载正确版本的libstdc++.so.6(also for libc.so),但我不确定。

如何解决这个问题?非常感谢!

标签: javac++11java-native-interface

解决方案


推荐阅读