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