Ошибка gcc: неправильный класс ELF: ELFCLASS64 - PullRequest
31 голосов
/ 19 октября 2008

Я пытался скомпилировать программу, используя внешний скомпилированный объект 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

Ответы [ 5 ]

35 голосов
/ 19 октября 2008

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

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

7 голосов
/ 19 октября 2008

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

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

4 голосов
/ 19 октября 2008

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

4 голосов
/ 19 октября 2008

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

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

2 голосов
/ 10 января 2012
sudo apt-get install ia32-libs 
...