У меня есть приложение Java, которое взаимодействует с нативным кодом, используя JNI.Собственный код компилирует файл во время выполнения и пытается загрузить этот файл с помощью вызова dlopen .Этот вызов завершается неудачно, и я получаю предупреждение о том, что
Could not load library (x):(x) undefined symbol: y
Однако, когда у меня есть собственное приложение, запускающее JVM через JNI, запускаю тот же код, эта ошибка не возникает и выполняется какожидается.Я подозреваю, что Java делает что-то необычное, что делает уже загруженные библиотеки невидимыми для библиотеки, загруженной с dlopen .
Это я сделал для диагностики проблемы:
- Подтверждено, в какой общей библиотеке находится символ, который предположительно не определен, с использованием
objdump
- Подтверждено, что библиотеказагружен с помощью
gdb
(через eclipse - библиотека была указана на панели модулей) - Напечатан LD_LIBRARY_PATH непосредственно перед тем, как dlopen и подтвердил, что Java пропустил его.там)
Я уже некоторое время пытаюсь решить эту проблему, но не могу понять, что происходит.Тем более, что он работает, когда JVM загружается из собственного приложения.
Заранее спасибо!