- Исполняемый файл Linux не работает с «Файл не найден», хотя файл есть и в PATH
- Исполняемый файл Linux завершается с ошибкой «Файл не найден», даже если файл есть и находится в переменной PATH
- Почему мой исполняемый файл не запускается, когда я нажимаю на него?
- 5 ответов 5
- Steam (Не удалось запустить игру «не найден исполняемый файл»)
- Исполняемый файл есть, но его нет
Исполняемый файл Linux не работает с «Файл не найден», хотя файл есть и в PATH
Я хочу запустить исполняемый файл (версия 2.12), но я получаю следующую ошибку ( $ = приглашение оболочки):
Тем не менее, файл есть:
Исполняемый определенно есть и нет мертвой символической ссылки:
Это 32-битный ELF:
Я могу получить динамический раздел исполняемого файла:
Однако я не могу перечислить зависимости общих объектов с помощью ldd :
Отредактировано для добавления предложения от @jww : Проблема возникает, когда запрашиваются динамически связанные библиотеки, потому что не генерируются отладочные сообщения ld :
Даже когда вы печатаете только LD_DEBUG значения LD_DEBUG , возникает ошибка
Отредактировано для добавления предложения @ Raman Sailopal: проблема, похоже, лежит в исполняемом файле, так как копирование содержимого /usr/bin/wine в другой уже созданный файл вызывает ту же ошибку
В чем проблема или что я могу сделать, чтобы узнать, какой файл или каталог отсутствует?
В сочетании с этим:
Строго предполагает, что в системе нет /lib/ld-linux.so.2 ELF-интерпретатора. То есть в этой 64-разрядной системе не установлены 32-разрядные библиотеки совместимости. Таким образом, ответ @ user1334609 в основном правильный.
Хорошо, я был занят последние восемь часов, чтобы снова запустить мою систему после выключения процессора. При перезагрузке стало очевидно, что он был настолько напуган, что даже ослабевшая консоль initrd больше не распознала мою клавиатуру. Для меня загадка, как система так долго оставалась оперативной, в то время как я пытался реализовать бесчисленные предложения от вас (большое спасибо!)
Проблема при перезагрузке:
и после этого клавиатура не работает 🙂
Проблема была: обновление заменило symlink /lib -> /usr/lib каталогом. Таким образом, это означало, что отсутствовали библиотеки и модули ядра, которые, как ожидается, будут в /lib 🙂
Поэтому я воссоздал символическую ссылку и переустановил базовую систему с живого компакт-диска.
Теперь, когда я снова подключился к интернету, я нашел эту нить
Я также использовал диспетчер пакетов моей смоченной на диске установки (называемой pacman ) с живого CD, чтобы переустановить все пакеты базовой группы (возможно, только ядро, поэтому пакетного linux было бы достаточно, я не знаю)
Для этого смонтируйте основной раздел кирпичной установки в каталоге /mnt системы live CD и используйте chroot чтобы сделать pacman think /mnt / (вставьте основной раздел вашей кирпичной системы для sdXXX )
Для записи: создайте относительную символическую ссылку, поэтому ln -s usr/lib /mnt/lib и не ln -s /usr/lib /mnt/lib , потому что во время ранней загрузки системы (этап initrd) основной раздел будет установлен первым to /new_root . Будет ли символическая ссылка абсолютной, вы получите вышеупомянутую ошибку во время ранней загрузки.
Вы пытаетесь запустить 32-разрядное приложение в 64-разрядной операционной системе, поэтому вам нужно установить 32-разрядные библиотеки совместимости (особенно glibc), прежде чем это может сработать.
Источник
Исполняемый файл Linux завершается с ошибкой «Файл не найден», даже если файл есть и находится в переменной PATH
Я хочу запустить wine исполняемый файл (Версия 2.12), но получаю следующую ошибку ( $ = приглашение оболочки):
Тем не менее, файл там:
Исполняемый файл определенно есть, и нет мертвой символической ссылки:
Это 32-битный ELF:
Я могу получить динамический раздел исполняемого файла:
Однако я не могу перечислить зависимости общего объекта, используя ldd :
Отредактировано, чтобы добавить предложение от @jww : Проблема, по-видимому, возникает до того, как запрашиваются динамически связанные библиотеки, потому что ld сообщения отладки не генерируются:
Даже при печати только возможных значений LD_DEBUG , вместо этого возникает ошибка
Отредактировано, чтобы добавить предложение @Raman Sailopal: Кажется, проблема заключается в исполняемом файле, поскольку копирование содержимого /usr/bin/wine в другой уже созданный файл приводит к той же ошибке
В чем проблема или что я могу сделать, чтобы узнать, какой файл или каталог отсутствует?
В сочетании с этим:
Настоятельно говорит о том, что в системе нет /lib/ld-linux.so.2 интерпретатора ELF. То есть в этой 64-битной системе не установлены 32-битные библиотеки совместимости. Таким образом, ответ @ user1334609 по сути правильный.
ОК, последние восемь часов я был занят восстановлением и запуском моей системы после выключения из-за перегрева процессора. При перезагрузке стало очевидно, что это настолько облажалось, что даже запасная консоль initrd больше не распознала мою клавиатуру. Для меня загадка, как системе удавалось так долго работать, пока я пытался воплотить в жизнь ваши бесчисленные предложения (большое спасибо !!)
Проблема при перезагрузке:
и после этого клавиатура не работает 🙂
Проблема была: Обновление заменило символическую ссылку /lib -> /usr/lib на каталог. Это означало, что все библиотеки и модули ядра, которые, как ожидается, будут /lib отсутствовать 🙂
Поэтому я воссоздал символическую ссылку и переустановил базовую систему с живого CD.
Теперь, когда у меня снова есть Интернет, я также нашел эту тему
Я также использовал менеджер пакетов моей кирпичной установки на диске (называемой pacman ) с живого компакт-диска, чтобы переустановить все пакеты базовой группы (возможно, только ядро, поэтому пакета linux было бы достаточно, я не знаю)
Чтобы достичь этого, смонтируйте основной раздел из замурованной установки в /mnt каталог живой системы CD и использование , chroot чтобы pacman думать , /mnt это / (вставка основного раздела ваших замуровали систем для sdXXX )
Для записи: создайте относительную символическую ссылку, так ln -s usr/lib /mnt/lib и нет ln -s /usr/lib /mnt/lib , потому что во время ранней загрузки системы (этап initrd) основной раздел будет смонтирован первым /new_root . Если бы символическая ссылка была абсолютной, вы бы получили вышеупомянутую ошибку при ранней загрузке.
Источник
Почему мой исполняемый файл не запускается, когда я нажимаю на него?
Почему кажется, что я не могу открыть исполняемый файл, созданный на 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 спросит, хотите ли вы запустить его в терминале, запустить без терминала или отредактировать файл в текстовом редакторе.
Источник
Steam (Не удалось запустить игру «не найден исполняемый файл»)
Вчера установил убунту (до этого с ней не работал).
Брат попросил установить ему Dota 2.
Установил стим/скачал доту. Запускаю ее и появляется эта ошибка:
Не удалось запустить игру «не найден исполняемый файл»
Один метод пробовал(нашел в сети):
в стиме на игре жмем «Свойства»/»Локальные файлы»/»Проверить целостность кеша» —- Не помогло!
Есть еще варианты?
На Windows(которая стояла до этого) — работала нормально!
Как запустить игру Steam?
Решил попробовать поиграть в игру из Steam. Установил Steam из Ubuntu Software Center, в Steam.
Ошибка 12 не удалось скопировать файл «obj\x86\Debug\ttt.exe» — файл не найден
C# Программа вдруг перестала запускаться (до этого работала. Последние действия — были удалены.
Не удалось найти реализацию шаблона запроса для исходного типа «Collection » . «Where не найден.»
Здравствуйте, только знакомлюсь с Linq, поэтому не знаком с данной ошибкой : «Не удалось найти.
Избавиться от сообщений «Файл не найден», «Системе не удается найти указанный путь», «Устройство не готово»
Здравствуйте. В батнике присутствует поиск файлов: for %%i in (c d e f g h i j k l m n o p q r s t.
Ошибок может быть несколько:
1) Нет прав на чтение раздела, где лежит сама игра, т.е ваш пользователь не может залезть в папку с дотой. Ищем пусть, пишем в консоли sudo chmod 777 -R * /gamedirectory Или чем-то подобным
2) Запустить стим от имени sudo/ sudo steam в консоли и так посмотреть. Что будет куда быстрее, если это косяк с правами.
3) Альтернативный путь указывали, или стандартный? Куда игра скачана? Попробуйте в /home разделе создать папку под игру и в неё перекачать
VaLenOK007, уххх.
1) у меня был диск «D» на windows.
2) убунту я ставил на второй диск
3) доту я хотел записать на «D» но у меня не получалось это сделать(формат ntfs, был), пришлось его отформатировать (не знал другого метода). И у меня теперь название странное этого диска, набор числ и букв например: 76sdsd76-s6d7s. Что-то вроде этого.
4) и игра сразу в корне этого диска и записана, там только одна эта папка.
Вечером потом попробую, как дома буду.
Добавлено через 2 минуты
как-то я пытался в терминале что-то сделать по поводу драйверов, и у меня попросили ввести пароль, я его ввожу, а он не вводится. Там что определенный метод есть свой, по вводу пароля? Или это я безрукий?))))))
Для безопасности, в *nix системах визуальный «ввод» пароля не практикуется. Т.е пароль вводится, но не отображается. Новичков это пугает)
Вот тут знающие камрады отправляют в пампасы гуглить. Объясню на пальцах. В никсах нет понятия «диск абц». В них есть понятие раздела. раздел есть сущность, которая выглядит как папка. переформатированный раздел можно обозвать как угодно, данный код — это что-то типа хеш-суммы раздела, случайное значение генерируемое хрен пойми откуда, вдаваться в это не буду. Есть утилитка — gparted, она позволяет все эти разделы перерезать как нужно. Т.е разделить, отформатировать, дать имя, задать метку и так далее. Советую почитать, прежде чем что-то делать вот тут
Источник
Исполняемый файл есть, но его нет
Скачал линуховый клиент для фотохостинга 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, так что имеет смысл попробовать им воспользоваться. Или Вы не об этом?
Источник