Java — __tls_get_addr @@ GLIBC_2.3 SIGSEGV с использованием JNA после переноса с 32-разрядного на 64-разрядный

У меня есть интересная проблема, которая заставила меня потерять половину моих волос за последние 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 и черпал небольшую соломинку в получении этой задачи). Если у кого-то есть какая-либо информация, указатели, советы и т. Д., Мы будем очень благодарны

Заранее спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]