6

使用 1.5(或 1.6 并打开 1.5 可比性模式)构建的 java 程序会给出以下警告:

Java HotSpot(TM) Server VM 警告:您已加载库 mynativelib.so,它可能禁用了堆栈保护。
虚拟机现在将尝试修复堆栈防护。强烈建议您使用“execstack -c”修复库,或使用“-z noexecstack”链接它。

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

那我应该去哪里找?

4

2 回答 2

5

在这里找到答案 禁用堆栈保护警告(ACF9,JVM 1.7,Linux)

他说

这是 Linux 上 Java 7 的 HotSpot 编译器中的一个功能,它试图阻止用 C 编写并链接到 Java(所谓的 Java 本机接口 - JNI)的代码,如果它被错误地或恶意地编写,则停止整个 VM。

于 2013-11-04T03:13:43.040 回答
2

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

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

  • 如果您有应用程序的源代码,请将其移植到 Linux 64 位
  • 如果没有,请下载该应用程序的 Linux 64 位版本。
于 2016-01-18T03:34:41.207 回答