Карты компоновщика могут быть очень полезны в больших проектах, когда вам нужно отслеживать зависимости между модулями компиляции и библиотеками. Обычно компоновщик сообщает о символе, вызвавшем проблемы, и чаще всего простой поиск по имени этого символа не возвращает никаких результатов (или возвращает тонны ложных срабатываний для таких символов, как read
).
Без карты компоновщика единственный вариант, который у вас есть, - это проанализировать все доступные исходные файлы (после прохода предварительной обработки, если использовались макросы, как это обычно бывает) и надеяться, что вы найдете подходящее место.
Карты компоновщика обычно имеют раздел, называемый «ссылка по файлу / символу», в котором указывается, какой объектный файл требовался для другого объектного файла вашего проекта, и на какой символ точно была ссылка.
Однажды я работал над проектом, который должен был быть перенесен в систему без поддержки локали. Компоновщик сообщал об «неопределенной ссылке на _localeconv_r
» об ошибках, которые было бы трудно отыскать при поиске по источникам. К счастью, файл карты компоновщика GCC, созданный с помощью -Map=output.map
, выявил все проблемные функции с помощью одного поиска.