Quando executo um dos aplicativos do meu usuário chamado "myfile".
$ ./myfile
Eu recebo a seguinte saída
bash: ./myfile: cannot execute binary file
Meu usuário espera que o arquivo binário seja executado. Eu suponho que este é um erro de compilação, mas não posso confirmá-lo. Eu corri o comando do arquivo
$ file myfile
myfile: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
Meu sistema operacional RHEL6 é de 64 bits
$ uname -p -o
x86_64 GNU/Linux
Então, parece-me que foi cumprida a arquitetura correta. Eu não entendo o que "relocável" significa na saída do comando de arquivo e não consegui obter uma explicação das páginas do manual.
Por uma boa medida, verifiquei as Dependências de Bibliotecas Compartilhadas
$ ldd myfile
not a dynamic executable
Existe alguma maneira que eu possa obter este arquivo para executar ou dar ao meu usuário algumas informações construtivas sobre por que ele não será executado (como ele precisa recompilar usando x)?
Strace
$ strace ./myfile
execve("./myfile", ["./myfile"], [/* 22 vars */]) = -1 ENOEXEC (Exec format error)
dup(2) = 3
fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7a9fc93000
lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
close(3) = 0
munmap(0x7f7a9fc93000, 4096) = 0
exit_group(1) = ?
output de leitura
readelf -S ./myfile There are 13 section headers, starting at offset 0x1e8:
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .text PROGBITS 0000000000000000 00000040
0000000000000098 0000000000000000 AX 0 0 4
[ 2] .rela.text RELA 0000000000000000 000006e0
0000000000000120 0000000000000018 11 1 8
[ 3] .data PROGBITS 0000000000000000 000000d8
0000000000000010 0000000000000000 WA 0 0 4
[ 4] .bss NOBITS 0000000000000000 000000e8
0000000000000000 0000000000000000 WA 0 0 4
[ 5] .rodata PROGBITS 0000000000000000 000000e8
0000000000000033 0000000000000000 A 0 0 1
[ 6] .comment PROGBITS 0000000000000000 0000011b
000000000000002d 0000000000000001 MS 0 0 1
[ 7] .note.GNU-stack PROGBITS 0000000000000000 00000148
0000000000000000 0000000000000000 0 0 1
[ 8] .eh_frame PROGBITS 0000000000000000 00000148
0000000000000038 0000000000000000 A 0 0 8
[ 9] .rela.eh_frame RELA 0000000000000000 00000800
0000000000000018 0000000000000018 11 8 8
[10] .shstrtab STRTAB 0000000000000000 00000180
0000000000000061 0000000000000000 0 0 1
[11] .symtab SYMTAB 0000000000000000 00000528
0000000000000180 0000000000000018 12 9 8
[12] .strtab STRTAB 0000000000000000 000006a8
0000000000000037 0000000000000000 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)