У меня есть библиотека, которую я хочу использовать. У меня нет исходного кода, но он содержит функцию, которую я хотел бы использовать. Это обычный общий объект x86-64 с некоторым кодом JNI и ничего особенного. Моя проблема в том, что библиотека ссылается на libm.so
. То, что сейчас происходит, довольно странно, и я этого не ожидал. Когда я пытаюсь запустить его, он сообщает мне, что libm.so
имеет недопустимый ELF-заголовок, что имеет смысл, потому что libm.so
является всего лишь ссылочным файлом libm.so.6
, который является фактическим файлом библиотеки.Linux Общая библиотека объектов Связь
Теперь мой вопрос, как исправить это? Я действительно удивлен, что операционная система не справляется с этим правильно, так как каждая программа будет ссылаться на libm.so
, а не libm.so.6
, так как она должна быть, по крайней мере, независимой от версии.
EDIT: Я сделал strace
и libm.so
, кажется, только верхушка айсберга ... Моя библиотека ссылающегося на многих распространенных стандартных библиотек Linux. И поскольку я выполняю его в JRE, он ищет только в каталоге JRE, и это совершенно неправильно. И поскольку библиотека взята из приложения Android, у исходного файла makefile, вероятно, были пути для библиотек, которые также не имеют смысла ... нужно сделать еще один анализ для решения этого вопроса.
Библиотека, которая является символической ссылкой на фактический файл, работает так же, как любая другая символическая ссылка. Должна быть другая проблема, которая вызывает ошибку. Что касается ошибки, можете ли вы скопировать-вставить фактическую ошибку, в полном объеме и неотредактированной, и показать ее в теле вопроса? Возможно, также показывая командную строку, используемую для компоновки (это связано с тем, что связь не удалась или она не срабатывает при попытке запустить вашу программу?). –