2016-05-01 5 views
1

Я делаю проект, который включает в себя создание файла makefile. Здесь у меня есть 2 разных файла. Первый выполняет начальный шаг сборки. Во втором make-файле я пытаюсь использовать первоначально сгенерированные объектные файлы (предоставленные пути) и добавить еще один дополнительный файл объекта, сгенерированный else где. Проблема, с которой я столкнулся, заключается в том, что компоновщик не может связать этот новый объектный файл с более старыми.Makefile linker не может связать один из объектных файлов

Я использую эту команду для выполнения этого шага.

arm-none-eabi-g++ -T ../linker.ld -nostartfiles -Xlinker --gc-sections -Wl,-Map,"map_file.map" -specs=nano.specs -o "target.elf" new_file.o all_older_files.o 

Здесь new_file.o имеет arm_eabi версии 0 и all_older_files.o является arm_eabi версии 5. Однако это не дает мне какие-либо ошибки или предупреждения. Интересно, что некоторые из символов в файле new_file.o включены в файл target.elf. Я проверил и проверил скрипт компоновщика, но не смог найти решение, а также проверить, имеет ли значение версия eabi какую-то разницу, но это то же самое, если я вручную отредактирую файл elf с помощью редактора эльфа.

Все, что я хочу, это то, что мне нужно включить разделы в new_file.o в этом target.elf, чтобы я мог использовать их.

+0

Прежде всего, зачем вам два make-файла? Вы не, не дай бог, вызывать рекурсивно Делать на одном makefile с другого? –

+0

Я в замешательстве - вы говорите, что компоновщик не дает ошибок, успешно генерирует выходной ELF, и упомянутый связанный ELF содержит материал из входных объектов - каким образом это «невозможно связать»? Это больше похоже на то, что ваш скрипт компоновщика просто отбрасывает больше, чем вы хотели, но не зная, что делает скрипт и какие разделы содержат объекты, которые могут сказать? Или, возможно, «отсутствующие» разделы просто не ссылались ни на что другое, поэтому они отбросили их, потому что вы сказали это. И какое отношение это имеет к make-файлам? – Notlikethat

+0

@MarkGaleck В моем проекте первый файл make похож на make-файл auto-gen из eclipse, так как я использую проект C на основе eclipse IDE. Второй make-файл - это то, что установлено в параметрах Post_Build, и я использую для создания некоторых дополнительных файлов, которые мне нужны в моем проекте. Я не хотел редактировать файл автогена или вносить изменения в настройку проекта. – codelock

ответ

0

Я думаю, что получил это. Спасибо @ Notlikethat, ваше понимание помогло мне. Я понял, что «-gc-разделы» игнорируют символы и разделы, на которые не ссылались.

Однако, когда я попробовал это в первый раз, разделы были отключены большими порциями памяти, чем это должно было быть, и подумал, что это не решение. Но позже я заметил, что исходный файл auto-gen makefile также делает то же самое удаление неиспользуемых разделов. Поэтому мне пришлось отключить это в настройке проекта eclipse, а затем удалить этот флаг в моем файле makefile. Это поставило разделы, где это должно быть.

Большое вам спасибо, это спасло мне много времени, поскольку я боролся с этим немного дольше, чем нужно.

Смежные вопросы