Как написать регулярное выражение для этого?

Правила выбора элементов архивной библиотеки практически одинаковы между двумя компоновщиками, но не имеют ничего общего с правилами определения необходимости «общей» библиотеки.

Для архива библиотеки с индексом символа (т. е. ranlib), компоновщик в свою очередь рассматривает каждый символ в индексе. Если символ удовлетворяет неразрешенной ссылке в этой точке ссылки, компоновщик будет включать в себя элемент архива, который определяет символ. Он делает повторные проходы над индексом символа, пока не добавятся новые члены архива.

Правила немного усложняются, когда речь идет о слабых символах и общих символах, а золото и BFD ld немного отличаются при обработке общие символы (на данный момент - см. PR 23411 ).

Архивные библиотеки без индекса символа в наши дни обычно не поддерживаются. Раньше считалось, что линкеры совершают один проход через библиотеку, добавляя член архива, если он удовлетворяет неразрешенную ссылку. Это потребовало, чтобы библиотеки были топологически отсортированы (и для многих систем Unix по-прежнему есть инструмент «lorder»).

Для разделяемых библиотек под действием опции --as-needed мы рассматриваем библиотеку как «нужен», если он удовлетворяет несладкой ссылке из обычного файла объекта. Золото отмечает, что общая библиотека «нужна», даже если ссылка исходит от объекта, который следует за ним в порядке ссылки; Я думаю, что BFD ld отмечает, что он «нужен», только если ссылка предшествует общей библиотеке.

Если вы пытаетесь выяснить, почему линкер считает, что конкретная библиотека - необходимо "или нет, вы можете найти полезный вариант компоновщика -y symbol.

1
задан Benjamin W. 18 January 2019 в 19:44
поделиться

1 ответ

Вы можете использовать

# With GNU grep:
grep -oP '^\s*\K\S+\s+\S+' <<< "$s"
# With a POSIX ERE pattern:
grep -oE '[0-9][^ ]* +[^ ]+' <<< "$s" 

См. Онлайн-демонстрацию

  • o - режим совпадения с выходом (не линейный)
  • [1114 ] P - механизм регулярных выражений PCRE используется для анализа шаблона

Детали шаблона PCRE:

  • ^ - начало строки
  • \s* - 0+ пробелов
  • \K - оператор сброса совпадений, отбрасывающий весь сопоставленный текст
  • \S+ - 1+ непробельных символов
  • [ 117] - 1+ пробелов и 1+ непробельных символов.

Шаблон POSIX ERE соответствует

  • [0-9] - цифре
  • [^ ]* - 0+ символов, кроме пробела
  • [1110 ] - 1 или более пробелов
  • [^ ]+ - 1+ символов, отличных от пробела.
0
ответ дан Wiktor Stribiżew 18 January 2019 в 19:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: