ld нераспознанный режим эмуляции /tmp/ccK2pwtc.o на ubuntu - PullRequest
0 голосов
/ 04 августа 2020

Я использую следующую машину:

Linux version 5.4.0-42-generic (buildd@lgw01-amd64-038) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020

Программа

int main() {
  return 0;
}

при компиляции

gcc -Wl,-m main.c

возвращает

/usr/bin/ld: unrecognised emulation mode: /tmp/ccJI1LRo.o
Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu elf_l1om elf_k1om i386pep i386pe
collect2: error: ld returned 1 exit status

Не знаю, с чего начать, чтобы узнать почему.

Также версии g cc и ld:

> gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

> ld --version
GNU ld (GNU Binutils for Ubuntu) 2.34
Copyright (C) 2020 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.

1 Ответ

1 голос
/ 05 августа 2020

Аргумент -Wl,-m указывает, что g cc должен передать аргумент -m компоновщику.

При вызове компоновщика используется параметр -m, за которым следует промежуточный объектный файл, который был скомпилирован (/tmp/ccJI1LRo.o), в отличие от поддерживаемой эмуляции, которая приводит к сообщению об ошибке, с которым вы столкнулись.

Параметр компоновщика -m требует аргумента для указания эмуляции. В выводе вашего вопроса перечислены поддерживаемые эмуляции.

...