gcc генерирует общий объект с разрешениями на выполнение - PullRequest
4 голосов
/ 10 июня 2011

Я строю общую библиотеку на Linux с помощью gcc. Я не получаю ошибок компиляции или ссылки, но мой общий объект всегда имеет установленный бит выполнения (хотя readelf указывает, что это общий объект). Я просто делаю это:

> echo "int f() {return 1;}" > a.cpp
> gcc -c a.cpp
> gcc -shared -o liba.so a.o
> ls -l liba.so
-rwxr-xr-x 1 me me 6652 2011-06-09 17:05 liba.so

Почему для общего объекта установлен бит выполнения?

Ответы [ 2 ]

5 голосов
/ 10 июня 2011

Потому что обычно вы можете запускать общие библиотеки. Большинство общих библиотек вылетает при их запуске, но вы можете выполнить их.

В некоторых библиотеках определена точка входа (-Wl, -e, the_name_of_your_entry_point, основная функция в стандартных программах на C), и вы можете выполнить их без сбоев.

1 голос
/ 08 мая 2012

HP-UX, например, требует, чтобы разделяемые библиотеки были исполняемыми. Если это не так, карта памяти динамического загрузчика завершается ошибкой с запрещенным разрешением. И, вероятно, не помешает иметь бит x на других платформах, поэтому GCC выбирает безопасный маршрут и устанавливает бит x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...