Расширение файла по умолчанию для исполняемого файла, созданного g ++ под Cygwin vs Linux - PullRequest
7 голосов
/ 11 декабря 2008

Я сделал большую часть своей работы над VisualStudio, и у меня нет большого опыта работы с gcc или g ++. Когда я пытался скомпилировать (например, aprogram.cpp) этим утром на моем компьютере с помощью cygwin, я получил (aprogram.exe), когда пытался скомпилировать то же самое на своем Ubuntu-боксе, который я получил (aprogram) без любого расширения , Мне просто интересно, если кто-то будет достаточно любезен, чтобы сказать мне, почему. Этот вопрос просто из любопытства. :)

Заранее спасибо!

EDIT: (из комментария Джимми) G ++ под Cygwin по умолчанию .exe

Ответы [ 8 ]

18 голосов
/ 11 декабря 2008

Это просто: в UNIX вам не нужны расширения steenkin '. Фактически, «расширение», подобное .c, является просто удобным соглашением об именах; в отличие от Windows, файловая система видит имя файла как одну строку, .c и все.

Для действительно хорошего времени, скомпилируйте программу на C без флага -o. Ваш исполняемый файл все равно будет отображаться с именем по умолчанию для исполняемых файлов: a.out.

12 голосов
/ 11 декабря 2008

Это просто соглашение об именах. В Unix / Linux исполняемые файлы не имеют расширения, только исполняемый бит.

6 голосов
/ 11 декабря 2008

.exe - вещь Windows. Unix не заботится о расширениях. Исполняемость основана на метаданных файла, а также на содержимом файла. g ++ via cygwin - это не на самом деле приложение для Windows, поэтому оно несет свои корни в Unix

3 голосов
/ 05 января 2009

Исполняемые файлы не имеют расширения в мире Unix, потому что они предназначены для выполнения в оболочке. Представьте себе следующее:

cat.bin file.txt | less.bin

Это ужасно! Unix использует так называемые магические байты в начале каждого файла для определения типа файла. Для двоичного формата по умолчанию, называемого ELF, в начале есть 4-байтовое слово 7f 45 4c 46. Это возможно не для всех форматов файлов. Рассмотрим код C или код Java. Они оба могут начинаться с комментариев и могут выглядеть одинаково. Таким образом, вы все равно должны использовать расширения имени файла, и это хорошо, когда используется там, где это уместно.

3 голосов
/ 11 декабря 2008

Если вам интересно, как запустить программу в UNIX, просто перейдите в папку с программой, которую вы хотите выполнить (aprogram), и введите

./aprogram

Это сообщит оболочке, что вы хотите выполнить 'aprogram' в текущем каталоге.

2 голосов
/ 11 декабря 2008

Если вы хотите, чтобы выходные данные имели расширение .exe, просто используйте для этого флаг -o (например, -o aprogram.exe). В любом случае под Linux это будет работать нормально.

Возможность выполнения программы под linux зависит от прав доступа к файлу (см. chmod ). Разрешения на выполнение будут автоматически установлены gcc / g ++.

1 голос
/ 13 августа 2012

Честно, просто назовите их .elf. И если вы не уверены, какой это тип файла, выполните:

$ file MyFile

Это скажет вам, каково содержимое файла, и вы можете выбрать имя таким образом, но это не обязательно - просто косметическое средство, если вы использовали расширения всю жизнь.

1 голос
/ 05 января 2009

ls / bin Есть много программ, и все они без расширения:)

ls -l / bin вы увидите, что у всех них есть флаг + x, помечающий их как исполняемый

...