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

min*_*hua 4 c linker gcc gnu ld

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

LiteOS项目上工作.该应用程序与许多-u选项链接.例如-utask_shellcmd.

GNU连接手册--undefined=symbol简单地说:

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

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

R..*_*R.. 8

-u选项仅在.a涉及archive()库时可能相关(也可能是有效的.so--as-needed).

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

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

  • *可移植的一个特例是静态对象的构造函数(在C++中,或通过GNU C属性使函数成为启动时运行的"ctor").引入一个否则未使用的目标文件可以通过导致该文件中的静态ctors链接并在启动时运行来改变程序行为. (2认同)