Любая разница между синтаксисом "-Wl, option" и "-Xlinker option" для gcc - PullRequest
28 голосов
/ 28 августа 2011

Я просматривал некоторые файлы конфигурации и видел, как они используются (хотя и на разных архитектурах). Если вы используете gcc для Linux, есть ли разница между двумя синтаксисами для передачи параметров компоновщику? Насколько я могу судить, читая руководство по gcc, они объясняются почти одинаково.

1 Ответ

34 голосов
/ 28 августа 2011

Я действительно не знаю, что еще делать, кроме как поискать man gcc, что вы должны иметь в виду для будущих вопросов, связанных с вызовом gcc.Итак:

-Xlinker option

Передать опцию компоновщику как опцию.Вы можете использовать это для предоставления системных опций компоновщика, которые GCC не знает, как распознать.

Если вы хотите передать опцию, которая принимает отдельный аргумент, вы должны использовать -Xlinker дважды, один раз для опциии один раз за аргумент.Например, чтобы передать определения -assert, вы должны написать определения -Xlinker -assert -Xlinker.Не получается написать -Xlinker «-assert определения», потому что это передает всю строку как один аргумент, а это не то, что ожидает компоновщик.

При использовании компоновщика GNU это обычно более удобнопередавать аргументы в параметры компоновщика, используя синтаксис option = значение, а не как отдельные аргументы.Например, вы можете указать -Xlinker -Map = output.map вместо -Xlinker -Map -Xlinker output.map.Другие компоновщики могут не поддерживать этот синтаксис для параметров командной строки.

-Wl, параметр

Передать параметр в качестве параметра компоновщику.Если опция содержит запятые, она разделяется на несколько опций через запятую.Вы можете использовать этот синтаксис для передачи аргумента опции.

Например, -Wl, -Map, output.map передает -Map output.map компоновщику.При использовании компоновщика GNU, вы также можете получить тот же эффект с -Wl, -Map = output.map.

Как вы можете видеть, с той лишь разницей, что -Wl позволяетВы можете указать несколько аргументов через запятую, например -Wl,-rpath,/my/libs, которую вы не можете сделать с -Xlinker;с другой стороны, -Xlinker может быть немного более информативным.Сделайте ваш выбор.Также проверьте другие компиляторы (nvcc на ум и clang), чтобы узнать, согласен ли кто-нибудь из них с синтаксисом, а затем используйте его для переносимости, если это важно для вас.

...