Пропуск несовместимой ошибки при линковке - PullRequest
0 голосов
/ 23 августа 2010

Я компилирую на 64-битной архитектуре с компилятором Intel C.Тот же самый код, прекрасно созданный на другой 64-битной архитектуре Intel.

Теперь, когда я пытаюсь собрать двоичные файлы, я получаю сообщение «Пропуск несовместимого ../../libtime.a» или что-то подобное,это указывает на то, что libtime.a, который я заархивировал (из некоторых скомпилированных объектных файлов), несовместим.Я гуглил, и казалось, что это обычно было результатом 32-> 64-битного переключения или чего-то в этом роде, но компилятор intel C, похоже, не поддерживает -64 или какой-то другой параметр памяти во время компиляции.Как устранить неполадки и исправить эту ошибку?

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Вам необходимо определить целевой процессор как библиотеки, так и нового кода, который вы создаете.Это можно сделать несколькими способами, но самый простой из них:

$ objdump -f ../../libtime.a otherfile.o

Для libtime это, вероятно, выведет кучувещи, но они все должны иметь один и тот же целевой процессор.Убедитесь, что otherfile.o (для которого вы должны заменить один из ваших объектных файлов) также имеет ту же архитектуру.

gcc имеет флаги -m32 и -m64 для переключения с цели по умолчанию на аналогичный процессор сдругой регистр и ширина памяти (обычно x86 и x86_64), которые также могут иметь компилятор Intel C.

Если это не помогло, вы должны включить команды (со всеми флагами), используемые для компиляции всего итакже информация о системах, в которых выполнялась каждая команда.

1 голос
/ 23 августа 2010

Вы не можете смешивать 64-битный и 32-битный скомпилированный код.Инструкции по настройке для Linux здесь .

...