使用Java 1.6调用magic_缓冲区的Redhat AS 4段错误 我有一个java类,它通过JNI C++类调用C++类,以访问LabMoovie提供的“文件”命令功能。 C++类编译并运行为C++主体()/LI>
-它在运行Java1.5和1.6的RHEL5上运行良好 -它在运行Java1.5的RHEL4上运行良好 -它在使用java 1.6的RHEL 4上抛出seg故障26234 seg故障:使用Java 1.6调用magic_缓冲区的Redhat AS 4段错误 我有一个java类,它通过JNI C++类调用C++类,以访问LabMoovie提供的“文件”命令功能。 C++类编译并运行为C++主体()/LI>,java,java-native-interface,segmentation-fault,redhat,Java,Java Native Interface,Segmentation Fault,Redhat,-它在运行Java1.5和1.6的RHEL5上运行良好 -它在运行Java1.5的RHEL4上运行良好 -它在使用java 1.6的RHEL 4上抛出seg故障26234 seg故障: 在调用char*retptr=magic_缓冲区(cookie,bigbuf,1000)时发生; 没有错的时候 char*retptr=“一个很好的安全字符串”;被替换。这就是为什么我得出结论,seg故障发生在这次调用中 我使用另一个调用char*retptr=magic_文件(cookie,“/usr/incl
有什么建议或意见吗?(最初在VMWare上运行,现在测试时没有虚拟机参与)我的第一个建议是尝试寻找纯Java的替代方案。列出了许多备选方案。ApacheTika和JMimeMagic看起来很有前途
我的第二个建议是使用
Process
在单独的进程中运行file
命令,并从命令的标准输出中获取所需的信息。如果您需要每秒执行数百次此操作,则可能会出现(嗯哼)性能问题,但偶尔使用也可以。这是在更新后发生的吗?在RHEL4上不能返回java 1.5吗?如果您发布C++代码给JNI专家检查,可能会有所帮助。这是对新发展的测试。我们有一个RHEL4/5和Java1.5/1.6的混合环境。我想找出问题的原因,而不是在不了解问题所在的情况下寻找解决方案。性能是我们为什么要寻找替代方案,以避免为每个实例生成新流程的原因。我认为#1没有帮助。我已经发布了seg故障发生的位置,以及为什么我不认为缓冲区问题是罪魁祸首。添加额外的代码只会掩盖这个问题。下面是一些代码:char*cptr=null;cptr=magic_文件(cookie,“/usr/include/magic.h”);该线路是seg故障发生的地方。这条线如上图所示。请注意,上面的讨论指出,该代码适用于Java1.5,在某些redhat版本下,仅适用于1.6抛出seg错误。C++代码编译和运行在所有OS版本和(当然)java版本下。性能成本很高,我们无法接受。请参阅我对这个问题的最新评论。