Для пояснения, это вопрос о двоичных Linux исполняемых файлах, а не о скриптах, которые также могут быть исполняемыми и часто не имеют расширения.
По моему опыту, большинство двоичных исполняемых файлов Linux не имеют расширение файла; например, большинство файлов в каталоге /bin
в системах Linux не имеют расширения.
С другой стороны, большинство файлов в каталоге /lib
имеют .so
в своем расширении, а также имеют разрешения на выполнение. Попытка выполнить файл .so
напрямую обычно приводит к сбою сегмента или некоторой ошибке, что имеет смысл, поскольку разделяемые библиотеки обычно предназначены для динамического связывания. Но, насколько я понимаю, если файл .so
имеет точку входа main()
, то вы можете запустить его как исполняемый , как обычный исполняемый файл (т.е. файл без расширения).
Мои вопросы:
- В чем разница между общей библиотекой (расширение
.so
) и исполняемым файлом (расширение [none]
)? Просто ли определена точка входа main()
? - В C ++ есть ли разница (т.е. флаги, передаваемые компилятору) в компиляции кода в общую библиотеку (расширение
.so
) и компиляции кода в a Linux исполняемый файл ([none]
расширение).
Изменить: В этом вопросе говорится о том, как создать файл .so с помощью командной строки g cc, но не Не идентифицируют различия между сборкой .so и обычного исполняемого файла.