У меня есть интересная проблема, которая заставила меня потерять половину моих волос за последние 24 часа, и это немного сложно, поэтому я надеюсь, что где-нибудь в мире хватит терпения прочитать это, и тогда я смогу помочь я вышел!
У нас есть приложение Java EE, работающее в JBoss, которое использует JNA для вызова библиотеки Native C ++ в RedHat 6.3. Библиотека C ++, которую мы использовали, была 32-битной, но недавно была портирована на 64-битную. Сейчас мы находимся в процессе обновления приложения JBoss для работы с использованием 64-разрядной JVM (RHEL JRE 1.6_43.1).
Когда мы перенесли Native-библиотеку в 64-битную версию, мы использовали тестовую заглушку C ++ для тестирования всех общедоступных интерфейсов, которые используются JNA — все эти тесты проходят без проблем.
Теперь, когда я пытаюсь получить доступ к 64-битной библиотеке Native с помощью JNA, я получаю следующую ошибку:
#
# A fatal error has been detected by the Java Runtime Environment
#
# SIGSEGV (0xb) at pc=0x0000003718b32fbc, pid=4489, tid=140200254654208
#
# JRE version: 6.0_22-b22
# Java VM: OpenJDK 64-Bit Server VM (20.0-b11 mixed mode linux-amd64 compresssed oops)
# Derivative: IcedTea6 1.10.6
# Distribution: Red Hat Enterprise Linux Server release 6.2 (Santiago), package rhel-1.43.1.10.6.el6_2-x86_64
# Problematic frame:
# C [libc.so.6+0x132fbc] __tls_get_addr@@GLIBC_2.3+0x132fbc
#
# ...
Я проследил источник ошибки до вызова, который делается в стороннюю библиотеку, которая вызывается из нашей недавно портированной Native библиотеки. Вызов в стороннюю библиотеку выполняется с набором значений, которые происходят из собственной библиотеки, а не со значениями, которые передаются в библиотеку.
Итак, по НЕКОТОРЫМ ПРИЧИНАМ мы получаем следующее поведение:
— вызвать нативную библиотеку из тестовой заглушки C ++: успех
— вызвать нативную библиотеку из Java через JNA: сбой (segfault)
У меня заканчиваются идеи о том, в чем может быть проблема, и мое незнание как JNA, так и C ++ серьезно меня сдерживает (я из команды в основном Java и черпал небольшую соломинку в получении этой задачи). Если у кого-то есть какая-либо информация, указатели, советы и т. Д., Мы будем очень благодарны
Заранее спасибо!
Задача ещё не решена.
Других решений пока нет …