Прежде всего мои извинения тем из вас, кто следил бы за моими вопросами, опубликованными в последние несколько дней. Это может показаться немного повторяющимся, поскольку я задавал вопросы, связанные с разделами -ffunction-sections и -fdata-sections, и этот вопрос находится в той же строке. Эти вопросы и их ответы не решили мою проблему, поэтому я понял, что для меня лучше всего изложить здесь полную проблему и позволить экспертам SO обдумать ее. Извините, что не сделал этого раньше.
Итак, вот моя проблема:
Я создаю набор статических библиотек, которые предоставляют множество функций. Эти статические библиотеки будут предоставляться многим продуктам. Не все продукты будут использовать все функции, предоставляемые моими библиотеками. Проблема в том, что размеры библиотек довольно велики, и продукты хотят, чтобы они были уменьшены. Основная цель — уменьшить окончательный размер исполняемого файла, а не размер самой библиотеки.
Теперь я провел небольшое исследование и обнаружил, что если в исходном файле есть 4 функции, и только одна из них используется приложением, компоновщик все равно включит остальные 3 функции в окончательный исполняемый файл, поскольку все они принадлежат одному и тому же объектному файлу. Далее я проанализировал и обнаружил, что -ffunction-sections, -fdata-sections и -gc-sections (это опция компоновщика) гарантируют, что будет связана только одна функция.
Но эти опции по независящим от меня причинам сейчас не могут быть использованы.
Есть ли другой способ, которым я могу гарантировать, что компоновщик свяжет только ту функцию, которая строго необходима, и исключит все другие функции, даже если они находятся в одном и том же объектном файле?
Есть ли другие способы борьбы с проблемой?
Примечание. Реорганизация моего кода почти исключена, так как это устаревший и большой код.
Здесь я имею дело в основном с VxWorks и GCC.
Спасибо за любую помощь!