GNU ld --undefined 选项有什么作用?
What does the GNU ld --undefined option do?
有人可以解释一下 GNU ld 选项 --undefined
的作用吗?
正在进行 LiteOS 项目。该应用与许多 -u
选项相关联。例如 -utask_shellcmd
。
GNU linker manual for --undefined=symbol
简单地说:
Force symbol to be entered in the output file as an undefined symbol. Doing this may, for example, trigger linking of additional modules from standard libraries.
因此符号将作为未定义的包含在输出文件中。如果该符号已在其中一个链接的 obj 文件中定义怎么办?如果它真的是未定义的,那么何时会发生附加模块的链接以及如何发生?
-u
选项仅在涉及存档 (.a
) 库时才相关(可能还有 .so
库 --as-needed
有效)。
与 linking 命令行上的单个对象文件 (.o
) 不同,这些文件都是按照它们出现的顺序 linked,来自存档库的对象文件只有当它们在 link 命令行顺序中出现的位置满足一个或多个未定义的符号引用时,才会被 linked。一旦 .o
档案中的文件被拉入 link,该过程将递归重复,因此如果它引入更多未定义的符号引用,来自相同(或更高版本)档案的其他目标文件将被拉进来满足他们。
使用 -u
允许您将特定符号(以及间接地定义它的目标文件的所有依赖项)拉入 link。当然,您可以直接将所有 .o
文件放在命令行上,而不使用任何存档库,但是通过使用库,您可以 避免 link 未使用的目标文件 (如果根据其他文件中的构建时可配置设置,大部分代码可能未被使用,这将特别有用!)同时获取您需要的代码。
有人可以解释一下 GNU ld 选项 --undefined
的作用吗?
正在进行 LiteOS 项目。该应用与许多 -u
选项相关联。例如 -utask_shellcmd
。
GNU linker manual for --undefined=symbol
简单地说:
Force symbol to be entered in the output file as an undefined symbol. Doing this may, for example, trigger linking of additional modules from standard libraries.
因此符号将作为未定义的包含在输出文件中。如果该符号已在其中一个链接的 obj 文件中定义怎么办?如果它真的是未定义的,那么何时会发生附加模块的链接以及如何发生?
-u
选项仅在涉及存档 (.a
) 库时才相关(可能还有 .so
库 --as-needed
有效)。
与 linking 命令行上的单个对象文件 (.o
) 不同,这些文件都是按照它们出现的顺序 linked,来自存档库的对象文件只有当它们在 link 命令行顺序中出现的位置满足一个或多个未定义的符号引用时,才会被 linked。一旦 .o
档案中的文件被拉入 link,该过程将递归重复,因此如果它引入更多未定义的符号引用,来自相同(或更高版本)档案的其他目标文件将被拉进来满足他们。
使用 -u
允许您将特定符号(以及间接地定义它的目标文件的所有依赖项)拉入 link。当然,您可以直接将所有 .o
文件放在命令行上,而不使用任何存档库,但是通过使用库,您可以 避免 link 未使用的目标文件 (如果根据其他文件中的构建时可配置设置,大部分代码可能未被使用,这将特别有用!)同时获取您需要的代码。