我在一个.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
有人遇到过类似的问题吗?