2015-09-29 2 views
0

У меня есть ЭОР, который внутри имеет в себе jffi-1.2.9-native.jar библиотеку - и загрузку архивов RAR вызывает виртуальную машину для сегментации - со следующей ошибкой:Загрузка RAR, который использует jffi вызывает JBoss/JVM для сегментации

Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library 
<path 
to>/wildfly/standalone/tmp/vfs/deployment/deploymentb41f06df572811e7/jffi-1.2.9-native.jar-d3417b30dd3cfd1/contents/jni/x86_64-Windows/jffi-1.2.dll 
which might have disabled stack guard. The VM will try to fix the 
stack guard now. It's highly recommended that you fix the library with 
'execstack -c <libfile>', or link it with '-z noexecstack'. 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# SIGSEGV (0xb) at pc=0x00007f9f0990e938, pid=28629, tid=140320456898304 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_40-b25) (build 1.8.0_40-25) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.40-b25 mixed mode linux-amd64 compressed oops) 
# Problematic frame: 
# C [ld-linux-x86-64.so.2+0x6938] _dl_map_object_from_fd+0x898 

Что Я не понимаю, почему это пытается загрузить эту библиотеку DLL, когда платформа, что я бегу на это:

Linux <machine> 3.0.101-0.15-default #1 SMP Wed Jan 22 15:49:03 UTC 2014 (5c01f4e) x86_64 x86_64 x86_64 GNU/Linux 

Мой вопрос - кто-нибудь видел такого рода проблемы раньше - и что вызывает окна dll для загрузки здесь?

ответ

0

Я отправлю ответ, если кто-либо ударит что-то подобное. Я не дошел до настоящего корня проблемы. Мое обходное решение состояло в том, чтобы повторно организовать EAR, так что теперь все внешние зависимости собираются вместе в EAR, а все остальные вспомогательные модули (такие как EJB и WAR) определяют <scope>provided</scope> в зависимостях maven. Таким образом, WAR и EJB не содержат внешних зависимостей. Это означает, что зависимости maven должны быть указаны в нескольких местах.

0

Единственный Possiblity я мог думать, почему *.dll вместо *.so Стараются быть загружено, является то, что системное свойство os.name передается JVM и определяет неправильную операционную систему.

class OsName { 
    public static void main(String[] args) { 
     System.out.println("OS: " + System.getProperty("os.name")); 
    } 
} 

Если вы запустите пример, как java -Dos.name=FooBar выход OS: FooBar.

+0

На самом деле - я просто исправил его, переустановив содержимое EAR (которое RAR развернуто как часть). Я переместил все библиотеки до EAR, и это делает проблему «dissappear» ... – Nim