LINUX.ORG.RU

История изменений

Исправление 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
Источник магии найден и теперь мы можем спать спокойно.