Я привязываюсь к статической библиотеке, и мне интересно, как следует обрабатывать снятие мертвого кода в llvm/Clang. Я не могу найти документацию, в которой намекает, что у Клана есть эквивалент -Wl, -gc-section или -dead_strip.Clang удаляет мертвый код во время статического связывания (gcc-эквивалент -Wl, -gc-sections)
Я предполагаю, что устранение мертвого кода выполняется автоматически на более высоких уровнях оптимизации, но это так в gcc тоже, правильно? Тем не менее, gcc обеспечивает некоторый явный контроль над этим посредством вышеупомянутых флагов. Разве Кланг не дает этого или я что-то упускаю?
(Система OSX)
'-fdce', вероятно, ссылается на аналогичную оптимизацию, выполненную * внутри * каждой функции компилятором. Для компилятора довольно часто можно доказать, что отдельные базовые блоки мертвы. – zwol
Да, жаль, что я не понимаю. Мой «параметр-уровень-аргумент» относится к -fdce, который, как я думал, выполнялся компилятором, а не компоновщиком. Но спасибо за ваш ответ - кажется, что dead_strip - это команда, чтобы перейти к компоновщику, и это действительно уменьшило размер двоичного файла (он был задокументирован только в man-страницах gcc, а не в clang). Я должен был читать man ld, чтобы получить, какие флаги он принял, а не ожидал, что руководство для компилятора будет включать в себя, какие флаги могут быть отправлены :)). – kamjagin