Linux не запускается исполняемый файл

Запуск исполняемых файлов.

Сразу укажу, что я полнейший нуб. Учусь пользоваться линуксом. Сейчас стоит fedora 22. Не запускаются скомпилированные исполняемые файлы. Компилирую СИшные файлики через ком строку. «gcc -c file.c -o file.o» и «gcc file.o -o file». После этих действий выдает ошибку при запуске через sh «не могу запустить бинарный файл.» Не хочет запускать ни file.o, ни file. Переустанавливал bash и gcc через ком строку с помощью dnf reinstall, не помогло. Мне интересен любой способ решения этой проблемы, который я буду способен в кратчайшие сроки освоить.

Предлагаешь нам самим догадаться, как именно ты запускаешь этот файл?

Дай право на выполнение:

[root@localhost программы]# gcc -c pr1.c -o pr1.o [root@localhost программы]# gcc pr1.o -o pr1 [root@localhost программы]# sh pr1 pr1: pr1: не могу запустить бинарный файл [root@localhost программы]# chmod +x pr1 [root@localhost программы]# sh pr1 pr1: pr1: не могу запустить бинарный файл [root@localhost программы]# ls pr1 pr1.c pr1.o адрес [root@localhost программы]# chmod a=x pr1.o [root@localhost программы]# pr1.o bash: pr1.o: команда не найдена. ^C [root@localhost программы]# sh pr1.o pr1.o: pr1.o: не могу запустить бинарный файл [root@localhost программы]# ./pr1.o bash: ./pr1.o: cannot execute binary file: Ошибка формата выполняемого файла [root@localhost программы]# ./pr1 указатель не определен

[root@localhost программы]# chmod +x pr1.o

[root@localhost программы]# ./pr1.o

bash: ./pr1.o: cannot execute binary file: Ошибка формата выполняемого файла

Ну фиг его знает. Выложи что ты там собираешь.

Да, вообще все мной собранные проги, которые даже раньше работали, не запускаются.

Источник

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

запуск исполняемого файла из терминала (не получается)

Модератор: Bizdelnick

запуск исполняемого файла из терминала

Re: запуск исполняемого файла из терминала

Сообщение Hephaestus » 18.10.2018 23:56

В данном конкретном случае происходит то, что запускаемый файл не имеет прав на исполнение.
Убедиться в этом можно, если посмотреть вывод команды ls -l
Косвенно об отсутствии прав на запуск свидетельствует также цветовая разметка в терминале: имя файла белого цвета (исполняемый файл, скорее всего, будет зеленого цвета).

По причине отсутствия прав запуск в виде ./eclips-inst оканчивается неудачей.
Также запрет на запуск может быть на уровне монтирования файловой системы.

Как решить: Либо дать права на запуск командой chmod +x eclips-inst
Либо запускать как sh ./eclips-inst

Но вообще это не очень хорошая (или даже очень нехорошая) практика для пакетного дистрибутива — запускать такие инсталляторы. Проблема в том, что неизвестно, куда и какие файлы он раскидает и что ещё поменяет в системе. Также в случае некачественно выполненного инсталлятора будут проблемы с дальнейшим удалением: инсталлятор не сможет удалить то, что сам же установил.
Вывод: Для пакетного дистрибутива, каким является Ubuntu, использовать пакеты из репозитария.

Источник

Исполняемый файл есть, но его нет

Скачал линуховый клиент для фотохостинга photofile. В архиве исполняемый файл. Пытаюсь запустить.

ему там может чего надо еще? посмотри ldd photofile что говорит? есть ли у тебя все что нужно?

Похоже, ему твоя glibc не нравится

а что если это файл скормить gdb? может он чего больше скажет?

Ну надо же, они что в Сети фуфло распространяют.

Хотя такая же штука была когда я пытался запустить скачанный с офиц. сайта firefox. Подозрительно всё это.

А ты с архитектурой не промахнулся?

ппц, линуксоиды скачивают и запускают бинарники. Куда катится мир?

А это не баш-скрипт ли часом? (:
Текстовым редактором откройте.

Так бывает, когда неправильно shabang указан.

а чмод + икс не нужно сделать?

>Так бывает, когда неправильно shabang указан.

тогда обычно bad interpreter говорят вроде перед No such file or directory

>а чмод + икс не нужно сделать?

>а чмод + икс не нужно сделать?

не читал первое сообщение? там же вывод ls -l есть.

Читайте также:  Восстановление системы astra linux с диска

-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 выясняет, как запускать процессы.

Читайте также:  При запуске ноутбука не загружается windows

Во-первых, это «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 спросит, хотите ли вы запустить его в терминале, запустить без терминала или отредактировать файл в текстовом редакторе.

Источник

Запуск EXE-файлов в Linux

Шаг 1: Установка Wine

Запуск EXE-файлов в Linux — задача несложная, однако небольшие трудности заключаются в поиске инструментов, позволяющих справиться с этим. Популярной программой является Wine, и ее аналогов почти нет, а существующие неизвестны практически никому. Поэтому в сегодняшней статье мы поговорим именно об этом решении. Начать стоит с его добавления в дистрибутив, поскольку по умолчанию Wine отсутствует в любой сборке ОС, основанной на Linux.

Способ 1: Менеджер приложений

Существует несколько доступных вариантов инсталляции Wine. Первый подразумевает использование менеджера приложений, который встроен в популярные дистрибутивы, основанные на Debian или RedHat. В первую очередь рассмотрим именно этот вариант, а осуществляется поставленная цель так:

  1. Откройте основное меню, кликнув по соответствующей кнопке, и запустите оттуда «Менеджер приложений».

Отыщите кнопку поиска, чтобы открыть строку для ввода названия программы.

Напишите Wine и опуститесь вниз по списку, чтобы найти подходящий вариант.

Для начала этой процедуры придется подтвердить подлинность учетной записи, введя пароль.

Ожидайте завершения инсталляции. Данная операция займет несколько минут, поскольку Wine является объемным приложением.

После нажмите на кнопку «Запустить», чтобы выполнить предварительную конфигурацию.

Сейчас давайте приступим к рассмотрению альтернативного варианта инсталляции, если этот вам не подходит, а о предварительной настройке установленного инструмента поговорим в отдельном шаге данного материала.

Читайте также:  Как установить с ноутбука windows с загрузочного диска

Способ 2: Официальные репозитории

Как известно, программы в «Менеджере приложений» находятся в официальных репозиториях, а принцип их установки основан на терминальных командах. Именно их и следует задействовать в тех случаях, когда нет возможности открыть решение с GUI или оно попросту отсутствует в используемом дистрибутиве. Не переживайте, управление консолью не является чем-то сложным, в чем и удостоверимся далее.

    Запустите «Терминал» удобным для вас образом, например, через меню приложений или горячую клавишу Ctrl + Alt + T.

В появившейся строке введите sudo apt install wine-stable . Если вы используете дистрибутив, основанный, например, на RedHat, следует заменить пакетный менеджер APT на установленный в текущей сборке. Это может быть, например, YUM или Pacman.

Подтвердите действие, написав пароль суперпользователя. Учитывайте, что символы, вводимые таким образом, никогда не отображаются в консоли, однако существуют и исключения. В некоторых дистрибутивах при указании символов в строке появляются звездочки.

Вы будете уведомлены об увеличении количества занятого пространства. Подтвердите это сообщение, выбрав вариант Д.

Ожидайте окончания инсталляции. Во время этого не закрывайте «Терминал», иначе весь процесс будет сброшен.

На этом инсталляция завершена. Имеются еще и другие альтернативные методы добавления Wine в операционную систему, но их детальный разбор сейчас не имеет смысла, поэтому перемещаемся к следующему этапу.

Шаг 2: Первый запуск и настройка Wine

К счастью, большинство параметров рассматриваемой программы уже настроены автоматически, а недостающие компоненты так же самостоятельно загружаются. Однако юзеру все-таки придется выполнить несколько действий перед переходом к запуску EXE-файлов.

    Запустите софт, например, через «Менеджер приложений» или введя его название в консоли.

Дождитесь завершения обновления конфигурации. Во время этого на экране будут появляться сообщения о надобности инсталляции дополнительных компонентов, включая .NET Framework и Gecko.

После этого отобразится графическое меню с пользовательской конфигурацией. Здесь присутствуют детальные описания каждого пункта на русском языке, поэтому мы предлагаем разобраться с этим самостоятельно. Связано это и с тем, что все параметры устанавливаются по желанию пользователей.

На этом процедура конфигурации успешно завершена, а значит, можно переходить к непосредственному запуску имеющихся EXE-файлов.

Шаг 3: Запуск EXE-файлов через Wine

Перед началом выполнения поставленной задачи хотим отметить, что не стоит рассматривать Wine как полноценное средство работы с программами для Windows. Конечно, он является эмулятором, но потребление системных ресурсов при запуске софта поднимается в несколько раз, а также могут отсутствовать какие-либо опции, изначально работающие в Windows. Далее мы расскажем о более подходящих решениях для использования ПО в Linux, а сейчас давайте все-таки разберемся с выполнением EXE-объектов.

    Откройте файловый менеджер и переместитесь к расположению необходимого файла.

Щелкните по нему правой кнопкой мыши и в контекстном меню выберите пункт «Открыть в другом приложении».

Появится отдельное окно «Выбрать приложение». Здесь вас интересует пункт «Wine — загрузчик Windows программ».

Если это уже полноценный софт, он откроется в новом окне и им можно управлять. В случае взаимодействия с инсталлятором начните стандартную операцию установки.

Дождитесь окончания этой операции. Она может занять много времени, поскольку процессор в большинстве ситуаций нагружается на максимум.

После этого вы можете запустить программу через значок на рабочем столе, графический интерфейс Wine или меню приложений.

Как уже было сказано ранее, запуск EXE-файлов — не лучший способ взаимодействовать с программами в Linux. Сейчас многие разработчики создают версии, корректно функционирующие в разных дистрибутивах, однако часто их нет в официальных репозиториях, то есть скачать из менеджеров приложений такой софт не получится. Приходится скачивать отдельные DEB или RPM-пакеты либо же вообще вручную распаковывать архивы. Не потрудитесь отыскать сборку требуемого софта для вашего дистрибутива, а затем установите ее, используя инструкции из приведенной далее статьи.

Это было все, что мы хотели рассказать о запуске ПО для Windows в Linux. Как видно, лучшее решение всего одно, поэтому его и задействуют абсолютно все пользователи, желающие реализовать данную цель. Остается только следовать инструкциям, чтобы без каких-либо проблем открыть EXE-элемент и начать взаимодействие с ним.

Помимо этой статьи, на сайте еще 12315 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Источник

Оцените статью