Java 加载带有未定义符号的JNI崩溃
我正在尝试将我的本机库链接到java应用程序,但当我尝试运行它时,我得到一个Java 加载带有未定义符号的JNI崩溃,java,c++,java-native-interface,Java,C++,Java Native Interface,我正在尝试将我的本机库链接到java应用程序,但当我尝试运行它时,我得到一个java.lang.unsatifiedlinkerror异常,抱怨缺少符号(\u ZTVN10\u cxxabiv117\u class\u type\u infoE) 我用g++编译了共享库,就像其他共享库一样 这是我第一次尝试使用JNI,我不知道如何让所有东西都正确链接。您可以使用工具链附带的c++filt可执行文件来删除缺少的符号。然后就是找出代码的哪一部分没有完成它应该做的事情 nm可用于列出代码中定义的符号。
java.lang.unsatifiedlinkerror
异常,抱怨缺少符号(\u ZTVN10\u cxxabiv117\u class\u type\u infoE
)
我用g++编译了共享库,就像其他共享库一样
这是我第一次尝试使用JNI,我不知道如何让所有东西都正确链接。您可以使用工具链附带的
c++filt
可执行文件来删除缺少的符号。然后就是找出代码的哪一部分没有完成它应该做的事情
nm
可用于列出代码中定义的符号。如果您看到一个符号在同一行上有一个U,那么它是未定义的,可能会导致此错误。将-E传递给gcc/g++会在预处理步骤后停止编译器,这可能也很有用
我过去犯过这个错误的原因基本上是:
- 没有建造我认为我正在建造的东西(这发生在我们中最好的人身上)
- 调用约定以意外方式损坏符号
- 尝试在不使用
-Wl、-soname、liblzw_压缩器的情况下重新链接。因此
选项。如果它能工作,我不能告诉你为什么,除了几个月前,我有一个非常类似的未定义符号错误(甚至可能是同一个符号),并从我的链接行中删除-Wl
选项修复了它。你能发布准确的链接行吗?你能验证libstdc++是否与之链接吗?当然:g++${CFLAGS}-shared-Wl,-soname,liblzw_compressor.so-o liblzw_compression_CompressedInputStream.o compression_CompressedOutputStream.o lzw.o当然,你能尝试在没有-Wl,-soname,liblzw_compressor.so
选项的情况下重新链接吗?几个月前,我遇到了一个非常类似的问题,我想我可以通过删除链接行中的-Wl
选项来修复它。但我可能记错了。实际上,出于某种原因,这似乎已经修复了它,但现在JVM正在崩溃。哦,好吧,至少现在我可以调试代码了!万分感谢!