Любая разница между синтаксисом «-Wl, option» и «-Xlinker» для gcc

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

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

Опция -Xlinker

Опция Pass в качестве опции для компоновщика. Вы можете использовать это, чтобы предоставить системные параметры компоновщика, которые GCC не знает, как распознать.

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

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

-Wl, вариант

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

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

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