Разница между gcc "-Xlinker" и "-Wl," варианты?

44
4

Согласно руководству GCC 6.1 по параметрам ссылки:

-Wl, опция

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

-Xlinker

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

Почему нам нужно 2 из них?

ДОБАВИТЬ 1

Точно так же, почему нам нужны как -Xassembler и -Wa для ассемблерных опций?

Цитата из GCC 6.1 doc о вариантах ассемблера:

-Wa, опция

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

-Xassembler

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

спросил(а) 2016-07-07T05:33:00+03:00 3 года, 5 месяцев назад
1
Решение
44

Разница заключается в следующем жирном тексте

-Wl, опция

Опция Pass в качестве опции для компоновщика. Если опция содержит запятые, она разделяется на несколько опций в запятых. Вы можете использовать этот синтаксис для передачи аргумента в эту опцию. Например, -Wl, -Map, output.map передает -Map output.map в компоновщик. При использовании компоновщика GNU вы также можете получить тот же эффект с помощью -Wl, -Map = output.map.

-Xlinker

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

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

Я предполагаю, что 2 аналогичные функции все еще существуют из-за совместимости с обратной связью.

ответил(а) 2016-07-07T09:33:00+03:00 3 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема