--unresolved-symbols=ignore-in-shared-libs 和 --allow-shlib-undefined 标志有什么区别

lis*_*reg 4 linker elf ld

以下链接器 (ld) 标志之间有什么区别:

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

--allow-shlib-未定义

?

作为跟进,此命名法中未解析的符号和未定义的符号之间有什么区别?

Mik*_*han 5

链接器选项:

--unresolved-symbols=method
Run Code Online (Sandbox Code Playgroud)

允许您为链接器指定 4 种不同标准(方法)中的任何一种,以报告或忽略链接中未解析的符号引用。手册上 说:

--unresolved-symbols=方法

确定如何处理未解析的符号。“方法”有四个可能的值:

'忽略所有'

   Do not report any unresolved symbols.
Run Code Online (Sandbox Code Playgroud)

'报告所有'

   Report all unresolved symbols. This is the default.
Run Code Online (Sandbox Code Playgroud)

'忽略对象文件'

   Report unresolved symbols that are contained in shared libraries, but ignore them if they come from regular object files.
Run Code Online (Sandbox Code Playgroud)

'忽略共享库'

   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.
Run Code Online (Sandbox Code Playgroud)

共享库本身的行为也可以由 --[no-]allow-shlib-undefined 选项控制。

通常,链接器会为每个报告的未解析符号生成错误消息,但选项 --warn-unresolved-symbols 可以将其更改为警告。

正如我强调的那句话所表明的,链接器选项:

--allow-shlib-undefined
Run Code Online (Sandbox Code Playgroud)

只是一种更简短的说法:

--unresolved-symbols=ignore-in-shared-libs
Run Code Online (Sandbox Code Playgroud)

在此上下文之间undefinedunresolved在此上下文中的含义没有区别:差异的建议只是这个古老工具的一部分。