未定义的对通过静态库中调用的同一文件中定义的函数的引用

Undefined reference to Function defined in same .c file invoked through static library

本文关键字:文件 定义 函数 引用 调用 静态 未定义      更新时间:2023-10-16

此静态C库(libabc.a)链接到C 程序。

在我的qmake pro文件中,我使用了
LIBS += pathToLib/libabc.a创建静态库时,我没有问题。当使用Qmake和gmake编译和运行CPP应用程序时,创建了其他CPP文件的对象文件,但我会收到以下错误:

../abc/libabc.a(mdl.o): In function 'SetExt': abc/src/mdl.c:2186: undefined reference to 'func1'

在MDL.C中,声明和定义都存在。
静态void func1(int *,char *,char *);

静态void func1(int *m,char *p,char *s)
{
.....
}

此功能的功能调用在C文件MDL.C中。创建静态库(使用GCC和AR)时,我是否犯了一个错误?或者,我错过了什么?

您将函数声明为

static void func1(int *, char *, char *);

per 6.2.2标识符的链接,C标准的第3段:

如果对象或对象的文件范围标识符声明 函数包含存储级规范符static,标识符 具有内部链接。

因此,func1()无法从汇编单元外部访问 - 它只能在其IN的源文件中使用。