Программа является частью набора тестов Xenomai, кросс-компилируемого из ПК с Linux в набор инструментов Linux + Xenomai ARM.
# echo $LD_LIBRARY_PATH
/lib
# ls /lib
ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so
ld-linux.so.2 libdl.so.2 libpthread.so.0
libc-2.3.3.so libgcc_s.so libpthread_rt.so
libc.so.6 libgcc_s.so.1 libstdc++.so.6
libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9
libcrypt.so.1 libm.so.6
# ./clocktest
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory
Изменить: ОК, я не заметил .1 в конце был частью имени файла. Что это значит?
linux
shared-libraries
file-not-found
xenomai
Заратустра
источник
источник
Ответы:
Обновление
Хотя то, что я пишу ниже, верно в качестве общего ответа об общих библиотеках, я думаю, что наиболее частой причиной такого рода сообщений является то, что вы установили пакет, но не установили версию этого пакета "-dev".
Ну, это не вранье -
libpthread_rt.so.1
в этом списке нет. Вам, вероятно, нужно переконфигурировать и перестроить его так, чтобы оно зависело от имеющейся у вас библиотеки, или установить все, что предоставляетlibpthread_rt.so.1
.Обычно числа после .so являются номерами версий, и вы часто обнаруживаете, что они являются символическими ссылками друг на друга, поэтому, если у вас есть версия 1.1 libfoo.so, у вас будет настоящий файл libfoo.so.1.0, и символические ссылки foo.so и foo.so.1, указывающие на libfoo.so.1.0. И если вы установите версию 1.1, не удаляя другую, у вас будет libfoo.so.1.1, а libfoo.so.1 и libfoo.so теперь будут указывать на новую, но любой код, для которого требуется эта точная версия, может используйте файл libfoo.so.1.0. Код, который опирается только на API версии 1, но не заботится, будет ли он 1.0 или 1.1, будет указывать libfoo.so.1. Как отметил Орип в комментариях, это хорошо объясняется на http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html .
В вашем случае, вы могли бы уйти с символической ссылкой
libpthread_rt.so.1
наlibpthread_rt.so
. Однако нет никаких гарантий, что это не нарушит ваш код и не поужинает на телевидении.источник
Ваша библиотека является динамической библиотекой. Вы должны сообщить операционной системе, где она может найти его во время выполнения.
Для этого нам понадобятся следующие простые шаги:
(1) Найдите, где находится библиотека, если вы ее не знаете.
(2) Проверьте наличие переменной среды пути динамической библиотеки (
LD_LIBRARY_PATH
)если нечего отображать, добавьте значение пути по умолчанию (или нет, если хотите)
(3) Мы добавляем желаемый путь, экспортируем его и пробуем приложение.
Обратите внимание, что путь должен быть каталогом, в котором
path.so.something
находится. Так что, еслиpath.so.something
в/my_library/path.so.something
нем должно быть:источник: http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html
источник
find
одиночку:find / -name the_name_of_the_file.so
LD_LIBRARY_PATH
следует указывать на каталог, содержащийpath.so.something
, а не наpath.so.something
себя.Вот несколько решений, которые вы можете попробовать:
LDCONFIG
Как отметил AbiusX: если вы только что установили библиотеку, вам может потребоваться запустить ldconfig .
Обычно менеджер пакетов позаботится об этом при установке новой библиотеки, но не всегда, и запуск ldconfig не повредит, даже если это не ваша проблема.
Пакет разработчика или неправильная версия
Если это не сработает, я также проверю предложение Пола и поищу версию библиотеки "-dev". Многие библиотеки разделены на пакеты dev и non-dev. Вы можете использовать эту команду для поиска:
Это также может помочь, если у вас просто установлена неверная версия библиотеки. Некоторые библиотеки публикуются в разных версиях одновременно, например, Python.
Расположение библиотеки
Если вы уверены, что правильный пакет установлен, а ldconfig его не нашел, он может просто находиться в нестандартном каталоге. По умолчанию, LDCONFIG выглядит
/lib
,/usr/lib
и каталоги , перечисленные в/etc/ld.so.conf
и$LD_LIBRARY_PATH
. Если ваша библиотека находится где-то еще, вы можете добавить каталог в отдельной строке/etc/ld.so.conf
, добавить путь к$LD_LIBRARY_PATH
библиотеке или переместить ее в/usr/lib
. Тогда бегиldconfig
.Чтобы узнать, где находится библиотека, попробуйте это:
(Замените
libraryname
на название вашей библиотеки)Если вы пойдете по
$LD_LIBRARY_PATH
маршруту, вы захотите поместить его в свой~/.bashrc
файл, чтобы он запускался при каждом входе в систему:источник
.conf
файлов с нестандартными путями lib, которые мне нужны/etc/ld.so.conf.d
(на которые указывает/etc/ld.so.conf
), помогло.У меня была похожая ошибка, я мог ее исправить, дав,
Надеюсь это поможет.
источник
Необходимо убедиться, что вы указали путь к библиотеке во время компоновки при компиляции вашего файла .c:
Часть -Wl, -R указывает результирующему двоичному файлу также искать библиотеку в / usr / local / lib во время выполнения, прежде чем пытаться использовать библиотеку в / usr / lib /
Надеюсь, это поможет вам.
источник
-Wl,-rpath DIR
.Попробуйте добавить
LD_LIBRARY_PATH
в~/.bashrc
файл файл с указанием путей поиска.Оно работает!
источник
Справочная страница linux.org объясняет механику, но не объясняет мотивы этого :-(
Для этого см. Sun Linker и Библиотеки Guide
Кроме того, обратите внимание, что «внешнее управление версиями» в Linux в значительной степени устарело, потому что управление версиями символов (расширение GNU) позволяет вам иметь несколько несовместимых версий одной и той же функции, присутствующих в одной библиотеке. Это расширение позволило glibc иметь ту же внешнюю версию:
libc.so.6
последние 10 лет.источник
добавить эти строки в конце
источник
У меня была похожая ошибка, и она не устранилась с выдачей LD_LIBRARY_PATH в ~ / .bashrc. Что решило мою проблему, добавив файл .conf и загрузив его. Перейти к терминалу и быть в Су.
Добавьте путь к вашей библиотеке в этом файле и сохраните его (например, / usr / local / lib). Вы должны выполнить следующую команду, чтобы активировать путь:
Проверьте ваш новый путь к библиотеке:
Если это показывает ваши файлы библиотеки, то вы готовы.
источник
Другое возможное решение в зависимости от вашей ситуации.
Если вы знаете, что libpthread_rt.so.1 совпадает с libpthread_rt.so, вы можете создать символическую ссылку:
Затем
ls -l /lib
следует показать символическую ссылку и на что она указывает.источник
У меня была эта ошибка при запуске моего приложения с Eclipse CDT в Linux x86.
Чтобы исправить это:
Установить путь
источник
Все, что мне нужно было сделать, это бежать:
Я был в папке, расположенной по адресу,
/usr/lib/x86_64-linux-gnu
и он работал отлично.источник
Если вы запускаете приложение в Microsoft Windows, путь к динамическим библиотекам (.dll) должен быть определен в переменной среды PATH.
Если вы запускаете свое приложение в UNIX, путь к динамическим библиотекам (.so) должен быть определен в переменной среды LD_LIBRARY_PATH.
источник
попробуйте установить sudo lib32z1
источник
Произошла ошибка, поскольку система не может сослаться на упомянутый файл библиотеки. Сделайте следующие шаги:
locate libpthread_rt.so.1
покажет путь ко всем файлам с этим именем. Давайте предположим, что путь есть/home/user/loc
.cd home/USERNAME
. Замените USERNAME на имя текущего активного пользователя, с которым вы хотите запустить файл.vi .bash_profile
и в концеLD_LIBRARY_PATH
параметра, перед тем.
, как добавить строку/lib://home/usr/loc:.
. Сохраните файл.источник
Я получил эту ошибку, и я думаю, что это та же самая причина, по которой вы
Попробуй это. Исправьте права на файлы:
«Sudo su», чтобы получить разрешения для вашей файловой системы.
источник
Я получил эту ошибку, и я думаю, что это та же самая причина, по которой вы
Попробуй это. Исправьте права на файлы:
источник
похожая проблема найдена здесь: https://bugzilla.redhat.com/show_bug.cgi?id=1456202 Я пробовал упомянутое решение, и оно действительно работает.
Решения в предыдущих вопросах могут работать. Но я думаю, что это простой способ исправить это. Попробуйте переустановить пакет
libwbclient
в fedora:источник
Я использую Ubuntu 18.04
Установка соответствующего пакета "-dev" работала для меня,
Я получал приведенную ниже ошибку, пока не установил вышеуказанный пакет,
источник