小编Jaa*_* L.的帖子

与静态库的弱链接

我在 .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

有人遇到过类似的问题吗?

c gcc static-libraries weak-linking

5
推荐指数
1
解决办法
3788
查看次数

标签 统计

c ×1

gcc ×1

static-libraries ×1

weak-linking ×1