Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

-Xlinker option

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

     

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

     

При использовании компоновщика GNU обычно удобнее передавать аргументы в параметры компоновщика с использованием синтаксиса option = value, а не как отдельные аргументы. Например, вы можете указать -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), чтобы узнать, согласны ли они с синтаксисом, и затем использовать это для переносимости, если это важно для вас.