Связывание объектных файлов разных типов

Я пытаюсь связать объектные файлы, которые изначально были созданы двумя разными ассемблерами. У нас есть некоторый устаревший ассемблерный код, который был скомпилирован в объектные файлы с использованием старого MRI-ассемблера для процессора 68332. Мы разрабатываем новое приложение с GNU Binutils m68k v2.24. Мы хотели бы использовать исходные объектные файлы, собранные старым ассемблером без изменений. Я настроил нашу среду сборки для этого. По историческим причинам наша среда сборки связана с тремя выходными форматами: Srecord, ieee и ELF. Когда я запускаю это происходит без ошибок для форматов Srecord и ieee. Однако для формата вывода ELF я получаю следующие ошибки:

m68k-elf-ld: не удалось объединить целевые данные файла

В результате файл Elf не создается.

Сначала я пытаюсь понять, что может означать это сообщение об ошибке, но не смог. Если кто-нибудь знает документацию GNU Binutils ld достаточно, чтобы указать мне, где определено определение ошибки, я был бы признателен за это.

Я на самом деле загрузил нашу цель и запустил вывод Srecord. Кажется, что он проходит много тестов так же, как и раньше, поэтому кажется, что он работает в некоторой степени.

Похоже, что наши устаревшие объектные файлы могут быть в формате coff. Я предполагаю, что это проблема. Есть ли способ конвертировать файл coff в формат ELF?

Заранее спасибо за любую поддержку.

1 ответ

Решение

Похоже, что наши устаревшие объектные файлы могут быть в формате coff. Я предполагаю, что это проблема. Есть ли способ конвертировать файл coff в формат ELF?

objcopy может быть использован для преобразования между форматами. Однако для этого он должен быть настроен на понимание обоих форматов. Вы можете проверить, какие форматы он принимает objcopy --info (сокращенный список появляется в конце objcopy --help).

если ты objcopy не поддерживает необходимые форматы, тогда вам придется создавать binutils самостоятельно.

Другие вопросы по тегам