Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java7上使用JNI运行Java5/6会发出堆栈保护警告_Java_Java Native Interface_Guard - Fatal编程技术网

在Java7上使用JNI运行Java5/6会发出堆栈保护警告

在Java7上使用JNI运行Java5/6会发出堆栈保护警告,java,java-native-interface,guard,Java,Java Native Interface,Guard,使用1.5(或1.6启用1.5可比性模式)构建的java程序发出以下警告: Java HotSpot(TM)服务器虚拟机警告:您已加载库 mynativelib.so可能已禁用堆栈保护 VM现在将尝试修复堆栈保护。强烈建议您修复 带有'execstack-c'的库,或将其链接到'-z' noexecstack’ 这似乎不会引起问题,但对我们的客户来说显然会有点吓人。 我不认为在7中构建java位可以解决这个问题,但我很难看到文档中说如何为java 7构建JNI libs,这就是警告所暗示的,我应

使用1.5(或1.6启用1.5可比性模式)构建的java程序发出以下警告:

Java HotSpot(TM)服务器虚拟机警告:您已加载库 mynativelib.so可能已禁用堆栈保护
VM现在将尝试修复堆栈保护。强烈建议您修复 带有'execstack-c'的库,或将其链接到'-z' noexecstack’

这似乎不会引起问题,但对我们的客户来说显然会有点吓人。 我不认为在7中构建java位可以解决这个问题,但我很难看到文档中说如何为java 7构建JNI libs,这就是警告所暗示的,我应该采取不同的做法

那么我应该去哪里寻找呢?

在这里找到了答案

他说

这是Java 7在Linux上的HotSpot编译器中的一个特性,它试图阻止用C编写并链接到Java(所谓的Java本机接口-JNI)的代码在编写错误或恶意时停止整个VM


另一种可能性是,您尝试运行的Java+JNI应用程序是针对32位Linux编译的

在这种情况下,有两种解决方案:

  • 如果您有应用程序的源代码,请将其移植到Linux 64位
  • 如果没有,请下载该应用程序的Linux 64位版本

这将是构建JNI的一个选项。i、 e.使用
gcc
g++
或任何东西。作为构建的一部分,您也可以尝试建议的命令。文章的要点是,如果这是关于您通过JNI访问的第三方库的警告,并且您相信它会顺利工作,那么可以忽略该警告。如果您能够更改库的编译,那么您可以研究如何为库启用堆栈保护。