Ошибка 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
Решение
Я думаю, что coreset.o был скомпилирован для 64-битной системы, а вы связываете его с 32-битной системой вычисления .o.
Вы можете попытаться перекомпилировать computation.c с флагом '-m64' в gcc. (1) р>
Другие советы
Вы можете указать '-m32' или '-m64', чтобы выбрать режим компиляции.
При работе со скриптами autoconf (configure) я обычно устанавливаю CC = " gcc -m64 " (или CC = "gcc -m32") в среде, чтобы все компилировалось с правильной битностью. По крайней мере, обычно ... люди находят бесконечные способы заставить это работать не совсем, но мой средний уровень очень высок (более 95%).
Оказывается, версия компилятора, которую я использовал, не совпадала с версией скомпилированного файла coreset.o. Р>
Один был 32-битным, другой - 64-битным. Я оставлю это на всякий случай, если кто-то столкнется с подобной проблемой.
Похоже, что объектный файл был скомпилирован на 64-битной цепочке инструментов, а вы используете 32-битную цепочку инструментов. Вы пытались перекомпилировать объектный файл в 32-битном режиме?
sudo apt-get install ia32-libs