A “emulação” seleciona diferentes scripts de linker ; você encontrará os próprios scripts em /usr/lib/ldscriptsseu sistema. As emulações que você listou correspondem a
elf32_x86_64: ELF para x64-32, também conhecido como x32 — binários x86-64 de 32 bits
elf_i386: ELF para i386 — binários i386 de 32 bits
i386linux: a.out para i386
i386pep: PE+ para x86-64 — binários de 64 bits no formato Windows
i386pe: PE para i386 — binários de 32 bits no formato Windows
Os scripts do linker definem o formato de saída e arquitetura, os diretórios de busca (onde ldprocura por bibliotecas), as seções no binário, entre outras coisas.
O formato do script do vinculador está bem documentado (veja acima), mas os scripts disponíveis não são; na maioria dos casos, o GCC especificará o correto, então você não precisa se preocupar com isso e, em outros casos, você acaba precisando ler os próprios scripts do vinculador para descobrir o que eles fazem.
A “emulação” seleciona diferentes scripts de linker ; você encontrará os próprios scripts em
/usr/lib/ldscripts
seu sistema. As emulações que você listou correspondem aelf32_x86_64
: ELF para x64-32, também conhecido como x32 — binários x86-64 de 32 bitself_i386
: ELF para i386 — binários i386 de 32 bitsi386linux
: a.out para i386i386pep
: PE+ para x86-64 — binários de 64 bits no formato Windowsi386pe
: PE para i386 — binários de 32 bits no formato WindowsOs scripts do linker definem o formato de saída e arquitetura, os diretórios de busca (onde
ld
procura por bibliotecas), as seções no binário, entre outras coisas.O formato do script do vinculador está bem documentado (veja acima), mas os scripts disponíveis não são; na maioria dos casos, o GCC especificará o correto, então você não precisa se preocupar com isso e, em outros casos, você acaba precisando ler os próprios scripts do vinculador para descobrir o que eles fazem.