GNU ld --undefined选项有什么作用?

时间:2017-03-03 21:46:41

标签: c gcc linker gnu ld

有人可以解释GNU ld选项--undefined的作用吗?

处理LiteOS项目。该应用与许多-u选项相关联。例如-utask_shellcmd

--undefined=symbol的{​​{3}}只是说:

  

强制符号作为未定义的符号输入到输出文件中。例如,这样做可能会触发标准库中其他模块的链接。

因此符号将作为未定义包含在输出文件中。如果符号已在其中一个链接的obj文件中定义,该怎么办?如果它确实是未定义的,那么当其他模块的链接将会发生时,它会如何发生?

1 个答案:

答案 0 :(得分:7)

-u选项仅在涉及归档(.a)库时可能相关(也可能.so库中--as-needed生效。)

与链接命令行上的单个目标文件(.o)不同,它们都按照它们出现的顺序链接,来自归档库的目标文件仅在满足一个或多个未定义的符号引用时才链接在它们出现在链接命令行顺序的点上。一旦归档中的.o文件被拉入链接,该过程将以递归方式重复,因此,如果它引入了更多未定义的符号引用,则将引入来自相同(或更高版本)归档的其他目标文件以满足它们。

使用-u可以使特定符号(以及间接地,它所定义的目标文件的所有依赖关系)被引入链接。当然,您可以直接将所有.o文件放在命令行上,而无需使用任何归档库,但通过使用库,您可以避免链接未使用的目标文件(这在大的情况下特别有用)部分代码可能未使用,具体取决于其他文件中的构建时可配置设置!),同时获得所需的代码。