Почему clang ++ и gcc / g ++ создают разные исполняемые файлы - PullRequest
0 голосов
/ 27 ноября 2018

При компиляции и компоновке с g ++ и clang ++ ожидается, что результирующий исполняемый файл будет связан равным по отношению к их связыванию.

Однако в некоторых случаях кажется, что исполняемые файлы clang ++ связаны с большим количеством библиотек, чемg ++, несмотря на те же аргументы, которые были переданы.

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

Почему это происходит?

1 Ответ

0 голосов
/ 27 ноября 2018

Оказывается, у gcc по умолчанию в ubuntu включена функция --as-needed, которая заставляет gcc эффективно игнорировать любую библиотеку, для которой ни один из ее символов не указан в цепочке связанных элементов

Это можно отключитьв gcc с флагом --no-as-needed.Или же вы можете ввести -Wl,--as-needed в качестве первой опции для clang ++, чтобы вести себя так, как это делает gcc.

...