编译时链接程序在构build共享库(取决于其他共享库)时是否有gcc标志跳过符号parsing? 出于某种原因,当我尝试构build依赖于B.so和A.so的共享库C时,我的工具链给出了undefined reference
错误,即使指定了相关性并存在。 我听说有一个gcc标志来将依赖关系parsing延迟到运行时。
我想你正在寻找--allow-shlib-undefined
。 从ld
手册页 :
--allow-shlib-undefined --no-allow-shlib-undefined Allows (the default) or disallows undefined symbols in shared libraries. This switch is similar to --no-undefined except that it determines the behaviour when the undefined symbols are in a shared library rather than a regular object file. It does not affect how undefined symbols in regular object files are handled. The reason that --allow-shlib-undefined is the default is that the shared library being specified at link time may not be the same as the one that is available at load time, so the symbols might actually be resolvable at load time. Plus there are some systems, (eg BeOS) where undefined symbols in shared libraries is normal. (The kernel patches them at load time to select which function is most appropriate for the current architecture. This is used for example to dynamically select an appropriate memset function). Apparently it is also normal for HPPA shared libraries to have undefined symbols.
允许未定义的符号是默认的,所以我猜你的问题实际上是不同的。