2017-01-20 12 views
0

У меня есть приложение на моей системе Ubuntu, построенное с помощью CMake с использованием предиката add_executable. Он прекрасно работает сам по себе, однако, readelf показывает, как DYN (Shared object file), который обычно применяется для разделяемых библиотек:Приложение отображается как DYN (файл общего объекта)

[email protected] 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 

Кто-нибудь знает, почему это может произойти?

+0

Илья, сделал комментарий ниже, ответив на вопрос? – yugr

+0

@ yugr да, спасибо. – ilya1725

ответ

-1

В современных исполняемых файлах дистрибутива по умолчанию скомпилированы по положению (см., Например, this question), что заставляет инструменты (file и т. Д.) Думать, что они являются общими libs. Я предлагаю вам указать ошибку в отношении соответствующих инструментов, чтобы они создавали более удобный для пользователя вывод.

+0

"создайте ошибку в отношении соответствующих инструментов, чтобы они обеспечивали более удобный вывод." - инструменты производят * правильный * вывод. –

+0

Ну, я думаю, что быть «полезным» (в данном случае не разбивать тонны скриптов, которые полагаются на существующее поведение) обычно более важно, чем быть правильным (или, по крайней мере, тем, что заслуживает серьезного внимания со стороны разработчиков дистрибутивов). Кроме того, известно, что 'файл' основан на эвристике, поэтому я не уверен, как можно правильно определить его правильность ... – yugr