java - JNI lib崩溃,更改了.c文件(未包含在Makefile中)

标签 java c++ crash java-native-interface loadlibrary

我们面临一个不寻常的问题,我们的JNI库在加载时崩溃。
我们使用CentOS 5.4 / G++和VS2005进行开发。

场景:
我们目前正在对产品进行增强,并希望使用JNI将新信息传递回Java服务器代码。
我们的C / C++代码可以正常工作,我们已经在开发环境中运行了大约6个小时左右对其进行了测试。我们已经更新了两个结果结构(已经存在),每个都具有一个长值,以传递新增强功能的结果。

当我们更新JNI代码以将结果传递给Java代码时,我们发现Java服务器在加载JNI时崩溃了,我们进行了调试,发现JNI lib崩溃了,即使我们没有在JNI lib代码库中进行更改。

在进一步的调试中,我们发现JNI Makefile包含一个.c文件(aa.c),其中对新增强功能进行了一些更改。我们首先在aa.c文件中一一评论我们的更改,发现只有当我们调用BBB.cpp::method1()时才发生崩溃(作为新增强功能的一部分已添加)。

不寻常的部分是,JNI lib中不需要此.c文件(aa.c),并且我们没有从JNI lib中调用aa.c的任何方法。
现在我们从JNI Makefile中删除了aa.c并可以正常编译,但是当我们调用BBB.cpp::method1()时仍然崩溃,如果我们删除此method1()调用则可以正常工作。

我们不确定,为什么/如何链接到Makefile中不包含的文件并崩溃。

这是我们看到的错误日志

已启动AgentServer#0:确定
12750 [Connection#Cnx:#0.0.1026:0-Session#c0s1]错误com.xx.xxx.xxxx-无法加载JNI BBBController库
java.lang.UnsatisfiedLinkError:/opt/XXXXX/lib/libjnixxx.so:无法在IA 32位平台上加载IA 32位.so
在java.lang.ClassLoader $ NativeLibrary.load(本地方法)
在java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
在java.lang.Runtime.loadLibrary0(Runtime.java:822)
在java.lang.System.loadLibrary(System.java:993)

请提出建议,任何想法将不胜感激。

提前致谢,

阿库拉

最佳答案

我建议您在启动应用程序时尝试在ld.so.1中打开调试,看看是否有任何线索。参见http://linux.die.net/man/8/ld-linux中的LD_DEBUG

关于java - JNI lib崩溃,更改了.c文件(未包含在Makefile中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311602/

相关文章:

ios - iOS 中奇怪的 SIGSEGV 崩溃

java - 注销重定向 Spring Security

java - 比较antlr生成的 token

java - 如何在 GWT 中获取上周日期

c++ - vector 推回

c++ - 在 C++ Armadillo 中使用虚数?

java - 如何下载并构建 Eclipse IDE for Java 代码?

c++ - 在 C++ 中处理数组的问题

android - 致命异常:AsyncTask#1使用JSON导致后台错误

android - 确定崩溃原因(BackStackRecord)