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

时间:2017-12-01 11:24:04

标签: c++ c linker qmake

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

在我的qmake专业档案中,我使用了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中,声明和定义都在那里。
static void func1(int *,char *,char *);

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

此函数的函数调用位于C文件mdl.c中。创建静态库时我犯了错误(使用gcc和ar)?或者,我错过了什么?

1 个答案:

答案 0 :(得分:1)

您将自己的职能宣布为

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

6.2.2标识符链接the C Standard第3段:

  

如果声明对象的文件范围标识符或   function包含存储类说明符static,标识符   有内部联系。

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