1

Мне нужно связать определенную библиотеку при выполнении приложения .jar. Я изменил переменную LD_LIBRARY_PATH и добавил (как первый каталог) путь к папке, содержащей нужную библиотеку. Я также попытался выполнить приложение с помощью опции -Djava.library.path = "path_to_so", но с тем же результатом.-Djava.library.path не связывает библиотеку .so

В бетоне, в результате я получить это:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /.../application/lib64/libshmlib.so: 
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /.../another_application/lib64/libshmlib.so) 

Есть ли какие-либо другие варианты, кроме упомянутых ранее?

+0

Вам нужна копия 'libshmlib.so', скомпилированная в версии Linux, которая имеет ту же самую или более старую версию' libc', «Продолжается». Жалоба обычно вызвана тем, что вы работаете с версией 'libc', которая старше версии libc, с которой была построена библиотека, и эта ошибка заключается в том, чтобы сказать вам, что старые файлы могут не работать новые вещи. – Petesh

ответ

2

LD_PRELOAD='path/of/lib.so' ./program в основном загружает данную библиотеку перед любым другим при выполнении данной программы. Так что это лучший вариант, если вам нужно загрузить конкретную библиотеку.

0

Если «нужная библиотека» - libshmlib.so, и это был ее путь, который вы прошли по-разному, то кажется, что библиотека была найдена, но для нее требуется библиотека C неправильной версии. Например, ваша библиотека может быть скомпилирована против более новой версии libc.so, чем у вас в этой системе. Если у вас есть источники libshmlib.so, попробуйте перекомпилировать их в своей системе. Если вы этого не сделаете, попробуйте получить подходящую версию libshmlib.so для вашей версии операционной системы. Или вы можете добавить путь к этим неразрешенным зависимостям к LD_LIBRARY_PATH, но, вероятно, это не так для libc.so, потому что попытка заменить libc.so кажется плохой идеей.

0

Моим решением было загрузить библиотеки, которые запрашивал libshmlib.so, а затем выполнить программу с помощью LD_PRELOAD='path/of/downloaded/lib.so'. Он работает так, как сейчас.

Смежные вопросы