- Нет такого файла или каталога в Linux Bash
- 1 ответ 1
- Исполняемый файл есть, но его нет
- Почему мой исполняемый файл не запускается, когда я нажимаю на него?
- 5 ответов 5
- unixforum.org
- запуск исполняемого файла из терминала (не получается)
- запуск исполняемого файла из терминала
- Re: запуск исполняемого файла из терминала
- Ошибка Linux при загрузке разделяемых библиотек: невозможно открыть файл общих объектов: нет такого файла или каталога
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- LDCONFIG
- Dev-пакет или неправильная версия
- Местоположение библиотеки
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
Нет такого файла или каталога в Linux Bash
Я установил программу на Linux (UBUNTU), я установил переменные среды. К сожалению, когда я набираю команду для запуска программы, она выдает мне сообщение: нет такого файла или каталога.
Я могу видеть файл, его разрешение установлено как исполняемый. Не понимаю почему?
Я установил эту программу на Mac и Windows раньше, и этого никогда не было! 🙁 Вот ссылка на программное обеспечение http://www2.parc.com/isl/groups/nltt/xle/doc/xle.html#sec1.5
Вот больше информации: это XLE!
Как видите, переменная окружения правильно установлена, поскольку она знает, где искать команду xle, но ..
Извлеките команду readelf -l xle
1 ответ 1
/Desktop$ xle
bash: /home/yasaman/Desktop/XLE/bin/xle: No such file or directory
Это ясно показывает, что файл находится в вашей PATH и имеет права на выполнение.
Наиболее частой причиной ошибки ENOENT в этих условиях является отсутствующий или поврежденный динамический загрузчик. not a dynamic executable ошибка исполняемого файла от ldd является еще одним признаком того, что это происходит.
Когда ядро execve са динамический исполняемый файл, он на самом деле не запустить сам исполняемый файл. Вместо этого он запускает динамический загрузчик, и загрузчик фактически организует запуск исполняемого файла после сопоставления всех необходимых общих библиотек.
Что говорит readelf -l xle ? Существует ли путь, указанный в сегменте INTERP ? Это исполняемый файл?
Так как файл является 32-битный исполняемый ELF вы , возможно , на 64-битной системе только? Если это так, вам нужно установить libc6-i386 .
Источник
Исполняемый файл есть, но его нет
Скачал линуховый клиент для фотохостинга photofile. В архиве исполняемый файл. Пытаюсь запустить.
ему там может чего надо еще? посмотри ldd photofile что говорит? есть ли у тебя все что нужно?
Похоже, ему твоя glibc не нравится
а что если это файл скормить gdb? может он чего больше скажет?
Ну надо же, они что в Сети фуфло распространяют.
Хотя такая же штука была когда я пытался запустить скачанный с офиц. сайта firefox. Подозрительно всё это.
А ты с архитектурой не промахнулся?
ппц, линуксоиды скачивают и запускают бинарники. Куда катится мир?
А это не баш-скрипт ли часом? (:
Текстовым редактором откройте.
Так бывает, когда неправильно shabang указан.
а чмод + икс не нужно сделать?
>Так бывает, когда неправильно shabang указан.
тогда обычно bad interpreter говорят вроде перед No such file or directory
>а чмод + икс не нужно сделать?
>а чмод + икс не нужно сделать?
не читал первое сообщение? там же вывод ls -l есть.
-rwxr-xr-x 1 sunny sunny 10771230 Май 19 2008 photofile
ну проглядел, чо
думаешь noexec? там ошибка другая была бы емнип.
file photofile
head -n 1 photofile
>Ну надо же, они что в Сети фуфло распространяют.
Пока что видно только что ты «в Сети фуфло распространяешь»
Это плохой файл, не исполняемый. Удалите его.
лддэхни его и посмотри какой библиотеки нехватает.
>Как это понять, файл есть, но его вдруг нет? Или это какая-то защита, предотвращающая от запуска чего не попадя? Дистрибутив — Debian
Ну видимо файл запускается, shell читает sha-bang, там написано /bin/bash, запускается /bin/bash ./photfile, но вот эта команда почему-то не видит этого файла. Попробуйте напрямую:
Ну и сам файл поглядите. (xxd | head и file)
Покажи file photofile
А заодно uname -a
Не, лучше наверное не показывай.
Дай угадаю — у тебя amd64?
А ты запускаешь на ней 32-битный бинарник, отсюда проблемы.
Копай в эту сторону.
и оно покажет что к чему и почему.
Судя по размеру, вряд ли
и оно покажет что к чему и почему.
Дай угадаю — у тебя amd64? А ты запускаешь на ней 32-битный бинарник, отсюда проблемы. Копай в эту сторону.
У меня на самом деле процессор AMD AM2+ 64 двухядерный. И система вся архитектуры amd64. Но вроде как бы 32-битные программы должны без проблем запускаться на 64-битной платформе, всегда так было. Вот 32-битный skype запускается.
А readelf что показывает? Признаёт этот файл исполняемым?
Попробуйте скормить этот файл /lib/ld-linux* с разными параметрами.
Например, /lib/ld-linux* —list ./photofile
>for GNU/Linux 2.2.5
Может, в этом дело?
Под /lib/ld-linux вы это имели в виду?
Пишет, что какая-то ошибка. И что это означает?
> И что это означает?
Рядом, случаем, нету другого ld-linux? Если нет, поищите в репозитории пакет для совместимости с 32-битными приложениями (странно, почему же skype работает?)
Может быть, /lib32/ld-linux* ?
linux32 ./photofile что скажет?
zgrep -E ‘CONFIG_X86_32|CONFIG_IA32_EMUL’ /proc/config.gz
это ж не библиотека
p.s. а мне викторина нравится ))
> это ж не библиотека
Но такой файл есть в пакете libc6-i386, так что имеет смысл попробовать им воспользоваться. Или Вы не об этом?
Источник
Почему мой исполняемый файл не запускается, когда я нажимаю на него?
Почему кажется, что я не могу открыть исполняемый файл, созданный на C++, дважды щелкнув по нему.
У меня есть файл, который я запустил из IDE, и я хотел бы знать, есть ли способ установить этот файл для открытия терминала при щелчке по нему, как это делает файл .exe в Windows.
Код C++, который я мог бы добавить в свой исходный код, который позволит это.
Настройте Мой ПК, чтобы открыть его.
Я стараюсь избегать наборов инструментов, насколько это возможно. Недавно я скомпилировал приложение для Windows (спасибо моему двоюродному брату, у него есть компьютер с Windows)
И было бы замечательно, если бы можно было сделать то же самое, что можно сделать в Windows на Linux, потому что у нас есть 2 Release Folders.
И я хотел бы, чтобы это простое приложение на основе терминала могло работать без необходимости быть экспертом.
Я добавил эту строку:
Он открывается на терминале, но просто показывает путь к файлу, а не саму программу.
5 ответов 5
Я ожидаю, что вам нужно установить «исполняемый» бит в файле, который выводится компилятором Linux C++, я не думаю, что это делается по умолчанию из соображений безопасности.
Просто «cd» в каталог, в котором находится ваш сгенерированный исполняемый файл.
Заменив «myexecutable» на имя вашего вывода компилятора.
Затем попробуйте запустить его с ./myexecutable
Я считаю, что это также должно сделать программу «работоспособной» с помощью щелчка мыши и консоли.
Точно так же, если вам нужно запустить «скрипт» из команд, вы можете попробовать следующее в файле скрипта, сохранить его как «myexe.sh» или что-то подобное:
Затем снова используйте
чтобы сделать так, чтобы вы могли запустить скрипт, нажав на него.
Я думаю, что корень вашей проблемы в том, что вы на самом деле не понимаете различия между эмулятором терминала и оболочкой и тем, как Linux выясняет, как запускать процессы.
Во-первых, это «Terminal Emulator», в среде на основе Gnome это обычно Gnome Terminal.
Затем есть «Shell», в Linux это обычно bash, хотя возможны и другие оболочки.
«Shell» работает внутри «Terminal Emulator». Это различие связано с возрастом физических терминалов, где физический терминал — это аппаратное обеспечение, которое принимает данные, пишет текст в цветах и т.д., А Shell — это программное обеспечение, которое обрабатывает пользовательские команды и управляет другими процессами на основе заданных команд.
В настоящее время у нас есть экран общего назначения, который может отображать любые изображения, поэтому мы больше не используем физический терминал, а вместо этого имеем «эмуляторы терминала», программное обеспечение, которое эмулирует работу физических терминалов, и оболочку, которая по-прежнему является та же самая оболочка, что и раньше (ну, современные оболочки используют преимущество программного эмулятора терминала, например, не ограничиваются физическим ограничением бумаги и т. д., но разрыв остается).
«Оболочка» не всегда работает внутри эмулятора терминала; Существуют также графические оболочки, такие как Nautilus (подсказка, Nautilus — название морского существа с большой раковиной) или Windows Explorer (не путать с Internet Explorer).
Как в оболочке командной строки, например, bash, так и в графической оболочке, например, Nautilus, исполняемый файл помечается установленным битом execute .
В командной строке вы можете использовать ls -l для просмотра битов прав доступа к файлу, например, rwxrwxrwx означает, что каждый может читать / писать / выполнять программу; rwxr-xr— означает, что владелец имеет полное разрешение, люди в группе файла могут читать и выполнять, но не могут писать, а другие могут только читать файл. В Nautilus вы можете щелкнуть правой кнопкой мыши файл> Свойства> вкладка Разрешения. На странице свойств Разрешения вы можете получить разрешение для файла, подобное тому, которое есть в командной строке.
Файл с установленным битом выполнения рассматривается как исполняемый файл и может быть выполнен с помощью ./filename (оболочка командной строки) или двойного щелчка (графическая оболочка).
Наконец, есть несколько других тонкостей того, как оболочка выполняет файл. В большинстве оболочек Linux вы можете «выполнить» скрипт, написанный на python/perl/php/bash, который не является скомпилированным исполняемым файлом. Поскольку эти файлы не являются скомпилированными в исходном коде исполняемыми файлами, для их выполнения требуется интерпретатор (например, интерпретатор python). В отличие от оболочки Windows (Explorer), которая определяет интерпретатор для вызова через расширение файла; Оболочки Linux определяют правильного интерпретатора, глядя на строку «hashbang», которая выглядит следующим образом
когда бит выполнения файла установлен, и у файла есть эта строка hashbang, оболочка вызовет интерпретатор /usr /bin /python с текущим файлом в качестве аргумента.
Nautilus также может распознать, когда программа является приложением командной строки, и предложит вам запустить приложение в Терминале. Когда вы дважды щелкнете по исполняемому скрипту, Nautilus спросит, хотите ли вы запустить его в терминале, запустить без терминала или отредактировать файл в текстовом редакторе.
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
запуск исполняемого файла из терминала (не получается)
Модератор: Bizdelnick
запуск исполняемого файла из терминала
Re: запуск исполняемого файла из терминала
Сообщение Hephaestus » 18.10.2018 23:56
В данном конкретном случае происходит то, что запускаемый файл не имеет прав на исполнение.
Убедиться в этом можно, если посмотреть вывод команды ls -l
Косвенно об отсутствии прав на запуск свидетельствует также цветовая разметка в терминале: имя файла белого цвета (исполняемый файл, скорее всего, будет зеленого цвета).
По причине отсутствия прав запуск в виде ./eclips-inst оканчивается неудачей.
Также запрет на запуск может быть на уровне монтирования файловой системы.
Как решить: Либо дать права на запуск командой chmod +x eclips-inst
Либо запускать как sh ./eclips-inst
Но вообще это не очень хорошая (или даже очень нехорошая) практика для пакетного дистрибутива — запускать такие инсталляторы. Проблема в том, что неизвестно, куда и какие файлы он раскидает и что ещё поменяет в системе. Также в случае некачественно выполненного инсталлятора будут проблемы с дальнейшим удалением: инсталлятор не сможет удалить то, что сам же установил.
Вывод: Для пакетного дистрибутива, каким является Ubuntu, использовать пакеты из репозитария.
Источник
Ошибка Linux при загрузке разделяемых библиотек: невозможно открыть файл общих объектов: нет такого файла или каталога
Программа является частью набора тестов Xenomai, скомпилированного с ПК Linux в Linux + Xenomai ARM toolchain.
Изменить: ОК. Я не заметил, что .1 в конце был частью имени файла. Что это значит в любом случае?
ОТВЕТЫ
Ответ 1
Обновить
Хотя то, что я пишу ниже, верно в качестве общего ответа об общих библиотеках, я думаю, что наиболее частой причиной такого рода сообщений является то, что вы установили пакет, но не установили «-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 . Однако нет никаких гарантий, что это не нарушит ваш код и не поужинает на телевидении.
Ответ 2
Ваша библиотека является динамической библиотекой. Вы должны сообщить операционной системе, где она может найти его во время выполнения.
Для этого нам понадобятся следующие простые шаги:
(1) Найдите, где находится библиотека, если вы ее не знаете.
(2) Проверьте наличие переменной среды пути динамической библиотеки ( LD_LIBRARY_PATH )
если нечего отображать, добавьте значение пути по умолчанию (или нет, если хотите)
(3) Мы добавляем желаемый путь, экспортируем его и пробуем приложение.
Обратите внимание, что путь должен быть каталогом, в котором находится path.so.something . Так что если path.so.something находится в /my_library/path.so.something он должен быть:
Ответ 3
Вот несколько решений, которые вы можете попробовать:
LDCONFIG
Как отметил AbiusX: если вы только что установили библиотеку, вам просто нужно запустить ldconfig.
ldconfig создает необходимые ссылки и кеширует самые последние общие библиотеки, найденные в каталогах, указанных в команде line в файле /etc/ld.so.conf и в доверенных каталогах (/lib и /usr/lib ).
Обычно ваш менеджер пакетов позаботится об этом при установке новой библиотеки, но не всегда, и это не помешает запустить ldconfig, даже если это не ваша проблема.
Dev-пакет или неправильная версия
Если это не сработает, я также рассмотрю предложение Paul и поискать версию библиотеки «-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 , чтобы он запускался каждый раз при входе в систему:
Ответ 4
У меня была аналогичная ошибка, я мог бы разрешить ее, указав
Надеюсь, это поможет.
Ответ 5
Вам необходимо убедиться, что вы указали путь к библиотеке во время связывание при компиляции вашего .c файла:
gcc -I/usr/local/include xxx.c -o xxx -L/usr/local/lib -Wl, -R/USR/локальные/Библиотека
Часть -Wl, -R сообщает полученному двоичному файлу также искать библиотеку в /usr/local/lib во время выполнения, прежде чем пытаться использовать его в /usr/lib/
Надеюсь, это поможет вам.
Ответ 6
Страница ссылки linux.org объясняет механику, но не объясняет мотивацию: — (
Кроме того, обратите внимание, что «внешнее управление версиями» в значительной степени устарело в Linux, поскольку управление версиями символов (расширение GNU) позволяет вам иметь несколько несовместимых версий одной и той же функции в одной библиотеке. Это расширение позволило glibc иметь ту же внешнюю версию: libc.so.6 за последние 10 лет.
Ответ 7
Попробуйте добавить LD_LIBRARY_PATH , который указывает пути поиска, в ваш файл
Ответ 8
добавить эти строки в конец
Ответ 9
Другое возможное решение в зависимости от вашей ситуации.
Если вы знаете, что libpthread_rt.so.1 совпадает с libpthread_rt.so, вы можете создать символическую ссылку:
Затем ls -l /lib должен теперь показать символическую ссылку и то, на что она указывает.
Ответ 10
У меня была эта ошибка при запуске моего приложения с Eclipse CDT в Linux x86.
Чтобы исправить это:
Выполнить как → Выполнить настройки → Среда
Ответ 11
У меня была похожая ошибка, и она не устранилась с выдачей LD_LIBRARY_PATH в
/.bashrc. Что решило мою проблему, добавив файл .conf и загрузив его. Перейти к терминалу и быть в Су.
Добавьте путь к вашей библиотеке в этом файле и сохраните его (например,/usr/local/lib). Вы должны выполнить следующую команду, чтобы активировать путь:
Проверьте ваш новый путь к библиотеке:
Если это показывает ваши файлы библиотеки, то вы готовы.
Ответ 12
попробуйте установить sudo lib32z1
Ответ 13
Все, что мне нужно было сделать, было запущено:
Я был в папке, расположенной в /usr/lib/x86_64-linux-gnu , и работал отлично.
Ответ 14
Если вы запускаете приложение в Microsoft Windows, путь к динамическим библиотекам (DLL) должен быть определен в переменной среды PATH.
Если вы запускаете приложение в UNIX, путь к динамическим библиотекам (.so) должен быть определен в переменной среды LD_LIBRARY_PATH.
Ответ 15
Произошла ошибка, поскольку система не может сослаться на упомянутый файл библиотеки. Сделайте следующие шаги:
- При запуске locate libpthread_rt.so.1 будет locate libpthread_rt.so.1 путь ко всем файлам с этим именем. Предположим, что путь это /home/user/loc .
- Скопируйте путь и запустите cd home/USERNAME . Замените USERNAME на имя текущего активного пользователя, с которым вы хотите запустить файл.
- Запустите vi.bash_profile и в конце параметра LD_LIBRARY_PATH , прямо перед . , добавьте строку /lib://home/usr/loc:. , Сохраните файл.
- Закройте терминал и перезапустите приложение. Это должно бежать.
Ответ 16
Я получил эту ошибку, и я думаю, что это та же самая причина, по которой вы
Попробуй это. Исправьте права на файлы:
«sudo su», чтобы получить разрешения для вашей файловой системы.
Ответ 17
Я получил эту ошибку, и я думаю, что это та же самая причина, по которой вы
ошибка при загрузке общих библиотек: libnw.so: невозможно открыть файл общего объекта: такого файла или каталога нет
Попробуй это. Исправьте права на файлы:
Ответ 18
похожая проблема найдена здесь: https://bugzilla.redhat.com/show_bug.cgi?id=1456202 Я пробовал упомянутое решение, и оно на самом деле работает.
Решения в предыдущих вопросах могут работать. Но я думаю, что это простой способ исправить это. Попробуйте переустановить пакет libwbclient в fedora:
Источник