GNU ld: как обнаружить многократно определенные символы? - PullRequest
1 голос
/ 30 января 2012

Я собираю два очень похожих набора исходного кода в один библиотечный архив. Возможно, есть 5 или 6 функций, которые определены с одинаковыми сигнатурами в двух наборах кодов, но с немного отличной реализацией. Мне нужно найти эти функции, чтобы я мог либо изменить их имена (если они мне нужны), либо удалить одну из них.

Я думал, что ld сделает за меня тяжелую работу, сообщив, что функции были многократно определены, но он этого не делает. В настоящее время у меня есть двухэтапная процедура ссылки:

1 - инкрементная ссылка двух наборов исходных файлов для создания архивного файла. Если я уже знаю, какие функции определены несколькими способами, я могу использовать nm, чтобы подтвердить, что символ дважды появляется в архиве.

2 - окончательная ссылка этого файла архива с объектом, вызывающим код библиотеки. «ld» не жалуется на этом шаге и, по-видимому, просто связывает первый соответствующий объект, который он находит в архиве, не сообщая, что второй объект также может быть использован.

Есть идеи, как заставить ld сканировать весь архив и сообщать о множественных функциях? Спасибо.

1 Ответ

1 голос
/ 30 января 2012

Попытайтесь установить ссылку на все файлы .o компонента (а не на файлы .a), и вы получите многократно определенные сообщения.

...