В чем разница между --unresolved-symbols = ignore-in-shared-libs и --allow-shlib-undefined flags - PullRequest
1 голос
/ 30 апреля 2019

В чем разница между следующими флагами компоновщика (ld):

- неразрешенные символы = ignore-in-shared-libs

- allow-shlib-undefined

?

И в качестве продолжения, в чем разница между неразрешенными символами и неопределенными символами в этой номенклатуре?

1 Ответ

3 голосов
/ 02 мая 2019

Параметр компоновщика:

--unresolved-symbols=method

позволяет указать любой из 4 различных критериев ( метод ) для компоновщика, чтобы сообщать или игнорировать неразрешенные ссылки на символы в связи. В руководстве написано:

- неразрешенные символы = метод

Определить, как обрабатывать неразрешенные символы.Существует четыре возможных значения для метода:

ignore-all

   Do not report any unresolved symbols.

report-all

   Report all unresolved symbols. This is the default.

игнорировать в объекте-files '

   Report unresolved symbols that are contained in shared libraries, but ignore them if they come from regular object files.

' ignore-in-shared-libs '

   Report unresolved symbols that come from regular object files, but ignore them if they come from shared libraries. This can be useful when creating a dynamic binary and it is known that all the shared libraries that it should be referencing are included on the linker’s command line.

Поведение для совместно используемых библиотек также можно контролировать с помощью - [опция no-] allow-shlib-undefined.

Обычно компоновщик генерирует сообщение об ошибке для каждого сообщенного неразрешенного символа, но опция --warn-unresolved-symbols может изменить это на предупреждение.

Как подчеркивается в предложении, которое я подчеркнул, опция компоновщика:

--allow-shlib-undefined

- это просто более короткий способ сказать:

--unresolved-symbols=ignore-in-shared-libs

Нетразница в значении между undefined и unresolved в этом контексте: предположение о разнице является лишь частью корня этого древнего инструмента.

...