Единственное реальное использование опции компоновщика --whole-archive
, которое я видел, - это создание общих библиотек из статических. Недавно я наткнулся на Makefile (ы), которые всегда используют эту опцию при компоновке с внутренними статическими библиотеками. Это, конечно, приводит к тому, что исполняемые файлы излишне втягивают объектный код, на который нет ссылок. Моя реакция на это заключалась в том, что это просто неправильно, я что-то здесь упускаю?
Второй вопрос, который у меня есть, связан с тем, что я прочитал относительно опции полного архива, но не смог разобрать. Кое-что о том, что параметр --whole-archive
должен использоваться при компоновке со статической библиотекой, если исполняемый файл также связывается с разделяемой библиотекой, которая, в свою очередь, имеет (частично) тот же объектный код, что и статическая библиотека. Это общая библиотека и статическая библиотека частично совпадают с точки зрения объектного кода. Использование этой опции приведет к тому, что все символы (независимо от использования) будут разрешены в исполняемом файле. Предполагается, что это позволит избежать дублирования объектного кода. Это сбивает с толку, если символ упоминается в программе, он должен быть определен однозначно во время компоновки, что это за дело с дублированием? (Простите меня, если этот абзац не совсем ясен)
Спасибо