Учитывая программуСтатические местные жители в методах и ELF OS ABI
$ cat main.cpp
#ifndef WITH_LOCAL_STATIC
static int y = 0;
#endif
class X {
public:
void foo() {
#ifdef WITH_LOCAL_STATIC
static int y = 0;
#endif
++y;
}
};
int main() {
X().foo();
return 0;
}
Составитель двумя различными способами:
$ g++ main.cpp -o global
$ g++ main.cpp -DWITH_LOCAL_STATIC -o local
я получаю два различных бинарных форматов:
$ file local
local: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x8d8e998601e44115b5fa6c0e71f3ed97cb13a0bd, not stripped
$ file global
global: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x3481ba7c6969ed9d1bd1c8ce0f052d574023d488, not stripped
Может
кого-нибудь объясните, почему я получаю ELFOSABI_LINUX
в одном случае, но ELFOSABI_NONE
в другом? Компилятор - gcc 4.7.2
Фон в том, что в моей среде загрузчик отклоняет исполняемые файлы, которые не являются ELFOSABI_NONE
.