Я пишу свой собственный скрипт компоновщика и код запуска (для встроенного процессора) и использую компоновщик GNU.
Сначала я начал только поддерживать C
код, и я получил мой код запуска работает нормально ….. тогда я попытался связать C++
программа. Это связано, и все было хорошо, но это не сработало.
После некоторой отладки я обнаружил, что скрипт компоновщика не помещал .sbss
раздел в любом месте (я поставил .bss
раздел где-то, но не .sbss
). Вот мой вопрос:
Можно ли сгенерировать предупреждение, когда раздел не связан с программой? …. Поиск в Google ничего не находит, и я просмотрел руководство компоновщика, но безрезультатно
Можно ли сгенерировать предупреждение, когда раздел не связан с программой?
Я не верю, что это возможно в компоновщике, но вы можете легко реализовать его в шаге пост-ссылки:
readelf -WS a.out | grep -q ' \.sbss' || { echo "Did not find .sbss!" >&2; false; }
Я хочу, чтобы это работало для произвольных разделов (о которых я могу не знать в настоящее время)
Такое предупреждение было бы бесполезным, потому что оно выстрелит все время.
Рассматривать:
main.o
определяет main
и не ссылается ни на что другое.foo.o
определяет foo
и имеет разделы .x
, .y
а также .z
, foo.o
это часть libfoo.a
Теперь, когда вы связываетесь с gcc main.o -lfoo
, foo.o
будут не втянитесь в ссылку (потому что на нее нет ссылок), и ваше предупреждение теперь сообщит вам, что .x
, .y
а также .z
не связаны в программе.
Других решений пока нет …