После компиляции получается разделяемая библиотека
Изучаю язык Си и столкнулся с вопросом, на который так и не смог найти ответа. После написания небольшой программки я компилирую ее с помощью gcc следующей командой:
gcc prog.c -o prog
На выходе получается файл без расширения, который я запускаю командой ./prog
Вопрос следующий: Если я перехожу в свойства файла, то там написано, что файл является разделяемой библиотекой. Почему он помечает его так? Если я захожу в файлы какой-то программы, например телеграм, то там есть файл, который помечен как исполняемый и при двойном щелчке предлагает его запустить. Как сделать то же самое с моей программой?
ОС LUbuntu 18.04
Ответы (2 шт):
Я нашел ответ. Это происходит из-за включенной по умолчанию технологии в компиляторе, которая называется ASLR. Чтобы ее выключить, нужно использовать флаг -no-pie. Тогда получается исполняемый файл. Больше информации есть на англоязычном сайте: https://stackoverflow.com/questions/34519521/why-does-gcc-create-a-shared-object-instead-of-an-executable-binary-according-to/55704865#55704865
Как в Clion собирать проект в исполняемый файл вместо разделяемой библиотек
SET(GCC_COVERAGE_COMPILE_FLAGS "-no-pie")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
Надо вот это добавить в CMakeList.txt