Приложение отображается как DYN (Общий объектный файл)
У меня есть приложение в моей системе Ubuntu, созданное с CMake
, с помощью add_executable
сказуемое. Он работает нормально сам по себе, однако, readelf
показывает это как DYN (Shared object file)
который обычно применяется к разделяемым библиотекам:
root@3cced4f9860d build# readelf -h ./unittest/unittests
ELF Header:
Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - GNU
ABI Version: 0
Type: DYN (Shared object file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x3e3660
Start of program headers: 64 (bytes into file)
Start of section headers: 19112592 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 31
Section header string table index: 28
Кто-нибудь знает, почему это может произойти?
1 ответ
Решение
В современных дистрибутивах исполняемые файлы по умолчанию компилируются в независимый от позиции код (см., Например, этот вопрос), что вызывает инструменты (file
и т. д.), чтобы думать, что они являются общими. Я предлагаю вам сообщить об ошибке в соответствующих инструментах, чтобы они выдали более удобный для пользователя результат.