История изменений
Исправление Deleted, (текущая версия) :
(хотя бы вторую часть)
Нашёл:
$ gcc -shared library.c -o library.so
$ file library.so
library.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3cca802ef4e1d7c8e3b70065ea08c2b2f9322764, not stripped
$ gcc -shared -Wl,-z,now library.c -o library.so
$ file library.so
library.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d291cddabb595c8d27aeef4d4d4d2a303bcedfea, not stripped
Но, повторюсь, дело тут не в gcc или clang или ld или любой другой части тулчейна. Дело в том, как утилита file пытается угадать тип ELF-файла. При том, что на уровне формата чёткого разделения между «исполнимый файл» и «разделяемая библиотека» просто не предусмотрено.
Исходная версия Deleted, :
Нашёл:
$ gcc -shared library.c -o library.so
$ file library.so
library.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3cca802ef4e1d7c8e3b70065ea08c2b2f9322764, not stripped
$ gcc -shared -Wl,-z,now library.c -o library.so
$ file library.so
library.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d291cddabb595c8d27aeef4d4d4d2a303bcedfea, not stripped