Подтвердить что ты не робот

Ошибка gcc: неправильный класс ELF: ELFCLASS64

Я пытался скомпилировать программу, используя внешний компилируемый объект coreset.o. Я написал тестовый файл public01.c, а мои функции находятся в computation.c, оба из которых компилируются. Однако его не удалось связать его вместе. В чем может быть проблема?

gcc -o public01.x public01.o computation.o coreset.o
ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to public01.x
collect2: ld returned 1 exit status
4b9b3361

Ответ 1

Я думаю, что coreset.o был скомпилирован для 64-битного, и вы связываете его с 32-разрядным computation.o.

Вы можете попробовать перекомпилировать computation.c с флагом '-m64' gcc (1)

Ответ 2

Вы можете указать '-m32' или '-m64', чтобы выбрать режим компиляции.

При работе с скриптами autoconf (configure) я обычно устанавливаю CC = "gcc -m64" (или CC = "gcc -m32" ) в среду, чтобы все было скомпилировано с правильной битути. По крайней мере, обычно... люди находят бесконечные способы сделать это не совсем работающим, но мой средний уровень очень высокий (более 95%) с ним.

Ответ 3

Оказывается, что версия компилятора, которую я использовал, не соответствовала скомпилированной версии, выполненной с помощью coreset.o.

Один из них был 32-битным, а другой - 64-битным. Я оставлю это на случай, если кто-то другой столкнется с аналогичной проблемой.

Ответ 4

Похоже, что объектный файл был скомпилирован на 64-битной инструментальной цепочке, и вы используете 32-битную инструментальную цепочку. Вы пытались перекомпилировать объектный файл в 32-битном режиме?

Ответ 5

sudo apt-get install ia32-libs 

Ответ 6

Пакет ia32-libs недоступен, но ссылается на другой пакет. Это может означать, что пакет отсутствует, был устарел или доступен только из другого источника Однако следующие пакеты заменяют его: lib32z1 lib32ncurses5

E: Пакет 'ia32-libs' не имеет кандидата на установку