3

Почему кажется, что я не могу открыть исполняемый файл, созданный на C++, дважды щелкнув по нему.

У меня есть файл, который я запустил из IDE, и я хотел бы знать, есть ли способ установить этот файл для открытия терминала при щелчке по нему, как это делает файл .exe в Windows.

Возможности:

  • Код C++, который я мог бы добавить в свой исходный код, который позволит это.

  • Настройте Мой ПК, чтобы открыть его.

Я стараюсь избегать наборов инструментов, насколько это возможно. Недавно я скомпилировал приложение для Windows (спасибо моему двоюродному брату, у него есть компьютер с Windows)

И было бы замечательно, если бы можно было сделать то же самое, что можно сделать в Windows на Linux, потому что у нас есть 2 Release Folders.

И я хотел бы, чтобы это простое приложение на основе терминала могло работать без необходимости быть экспертом.


Я добавил эту строку:

Система ("гном-терминал");

Он открывается на терминале, но просто показывает путь к файлу, а не саму программу.

5 ответов5

5

Я ожидаю, что вам нужно установить "исполняемый" бит в файле, который выводится компилятором Linux C++, я не думаю, что это делается по умолчанию из соображений безопасности.

Просто "cd" в каталог, в котором находится ваш сгенерированный исполняемый файл.

chmod +x myexecutable

Заменив "myexecutable" на имя вашего вывода компилятора.

Затем попробуйте запустить его с ./myexecutable

Я считаю, что это также должно сделать программу "работоспособной" с помощью щелчка мыши и консоли.

Точно так же, если вам нужно запустить "скрипт" из команд, вы можете попробовать следующее в файле скрипта, сохранить его как «myexe.sh» или что-то подобное:

#!/bin/sh
command1
command2

Затем снова используйте

chmod +x myexe.sh 

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

3

Я думаю, что корень вашей проблемы в том, что вы на самом деле не понимаете различия между эмулятором терминала и оболочкой и тем, как 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", которая выглядит следующим образом

#!/usr/bin/python

когда бит выполнения файла установлен, и у файла есть эта строка hashbang, оболочка вызовет интерпретатор /usr /bin /python с текущим файлом в качестве аргумента.

Nautilus также может распознать, когда программа является приложением командной строки, и предложит вам запустить приложение в Терминале. Когда вы дважды щелкнете по исполняемому скрипту, Nautilus спросит, хотите ли вы запустить его в терминале, запустить без терминала или отредактировать файл в текстовом редакторе.

1

Простыми словами:

  1. Ваш сгенерированный исполняемый двоичный файл может не иметь исполняемого бита. Системы на основе Unix используют эту функцию в целях безопасности. Установите его с помощью: chmod +x yourbinary .
  2. Бинарный файл на самом деле может быть выполнен, но так как linux не запускает эмулятор терминала (который в некоторой степени напоминает интерфейс между вами и stdout) для запуска по умолчанию, вы ничего не видите.

Для последнего случая вы можете:

  1. Создайте скрипт, который запускает ваш исполняемый файл через эмулятор терминала, например:

    exo-open --launch TerminalEmulator -e 'yourbinary'
    

    Запустить его на терминале по умолчанию (если у вас есть команда exo ) или явно использовать его.

  2. Создайте файл desktop для его запуска.

  3. Дайте им специальное специальное расширение, например .exec и настройте их на запуск с помощью команды, предложенной в предложении 1. (или аналогичной) в настройках расширения вашего файла (если ваша ОС поддерживает эту функцию).

1

сделать скрипт для его выполнения внутри xterm или что-то в этом роде. Убедитесь, что ваша программа взаимодействует с пользователем до окончания. (Работает ли это, когда вы запускаете его внутри xterm? Работает ли он, когда вы запускаете его внутри типичной оболочки bash?)

xterm -e command [args1 args2]
0

Если вы скомпилировали его в Windows, и это исполняемый файл, я не вижу причин, по которым терминал не должен открываться в Windows, когда вы дважды щелкаете исполняемый файл. Вы уверены, что код не закрывается (segfault и т.д.)? Было бы неплохо убедиться, что программа не аварийно завершает работу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .