我在 .c 文件中声明了一个带有 GCC 弱属性的外部函数:
extern int weakFunction( ) __attribute__ ((weak));
编译后的目标文件将weakFunction 定义为弱符号。nm的输出:
1791: w weakFunction
我调用弱定义函数如下:
if (weakFunction != NULL)
{
weakFunction();
}
当我通过将目标文件定义为 GCC ( gcc main.o weakf.o -o main.exe
) 的参数来链接程序时,弱符号工作正常。如果我将weakf.o 排除在链接之外,则main.c 中的函数地址为NULL,并且不会调用该函数。
问题是,当weakf.o 在静态库中时,由于某种原因,链接器找不到函数并且函数地址总是最终为NULL。静态库是用 ar 创建的:ar rcs weaklibrary weakf.o
有人有类似的问题吗?