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