запуск java 5/6 с JNI на java 7 дает предупреждение о защите стека

Программа Java, созданная с помощью 1.5 (или 1.6 с включенным режимом сравнения 1.5), выдает это предупреждение:

Предупреждение Java HotSpot™ Server VM: вы загрузили библиотеку mynativelib.so, которая могла отключить защиту стека.
Теперь виртуальная машина попытается исправить защиту стека. Настоятельно рекомендуется исправить библиотеку с помощью «execstack -c» или связать ее с помощью «-z noexecstack».

Кажется, это не вызывает проблем, но, очевидно, будет выглядеть немного пугающе для наших клиентов. Я не думаю, что сборка java-битов в 7 решит эту проблему, но я изо всех сил пытаюсь понять, где в документах говорится, как создавать JNI-библиотеки для Java 7, и предупреждение подразумевает, что я должен делать по-другому.

Так где я должен искать?


person Simon Heffer    schedule 19.09.2013    source источник
comment
Это будет вариант, с которым вы строите JNI. то есть с gcc или g++ или как-то еще. Вы также можете попробовать предложенную команду как часть сборки.   -  person Peter Lawrey    schedule 19.09.2013


Ответы (2)


Нашел ответ здесь предупреждение об отключении защиты стека (ACF9, JVM 1.7, Linux)

Он сказал

Это функция компилятора HotSpot для Java 7 в Linux, которая пытается остановить код, написанный на C и связанный с Java (так называемый Java Native Interface — JNI), от остановки всей виртуальной машины, если она написана плохо или злонамеренно.

person Data    schedule 04.11.2013
comment
Суть поста в том, что если это предупреждение о сторонней библиотеке, к которой вы обращаетесь через JNI, и вы верите, что она будет работать без сбоев, то можно игнорировать предупреждение. Если вы можете изменить компиляцию библиотеки, вы можете изучить, как включить защиту стека для библиотеки. - person Stan Kurdziel; 02.08.2014

Другая возможность заключается в том, что приложение Java+JNI, которое вы пытаетесь запустить, было скомпилировано для 32-разрядной версии Linux.

В таком случае два решения:

  • Если у вас есть исходный код приложения, перенесите его на Linux 64bit.
  • Если нет, загрузите 64-битную версию приложения для Linux.
person Nicolas Raoul    schedule 18.01.2016