Насколько возможно удаление неиспользуемого кода и данных из статических библиотек?

Есть задача: быстро и просто создавать GUI-приложения как можно меньшего размера (в идеале, чтобы данные и код интерфейса занимали не более 3-5 мегабайт) в виде единого исполняемого файла. Желательна мультиплатформенность.


В качестве фреймворка идеально подходит Qt, но он слишком громоздкий. Попытки пересобрать его с минимальным набором функционала выигрыша в размере практически не дали. Альтернативы вроде wxWidgets тоже рассматривались, никаких плюсов по сравнению с Qt не имеют. Всякие маловесные библиотеки либо слишком заморочены, либо имеют другие критические недостатки.


Собственно, вопрос: существуют ли способы слинковать приложение так, чтобы в нём не было неиспользуемого кода/данных? Наверняка ведь для этого что-нибудь придумано.


P.S. Об упаковщиках исполняемых файлов я знаю, вопрос об удалении избыточных данных.
  • Вопрос задан
  • 3605 просмотров
Решения вопроса 1
horror_x
@horror_x Автор вопроса
Для MSVC идеальное решение предложил MikhailEdoshin:
Оно работает не само по себе, а только если указать компилятору паковать функции в т.н. COMDAT-объекты (/Gy), а линковщику — удалять такие объекты, если они не используются и/или «сворачивать» идентичные объекты (/OPT:REF, /OPT:ICF).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BrainHacker
Берете IDE, добавляете туда проект фреймворка Qt и свой проект. Настраиваете свой проект так, чтобы он ссылался на код Qt. Сам же фреймворк Qt собираете как статическую библиотеку.
В итоге компилятор возьмет из Qt только те участки кода, которые реально нужны вашему приложению.

Все выше описанное точно работает для VS 2010.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы