此静态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)?或者,我错过了什么?
答案 0 :(得分:1)
您将自己的职能宣布为
static void func1(int *, char *, char *);
每 6.2.2标识符链接,the C Standard第3段:
如果声明对象的文件范围标识符或 function包含存储类说明符
static
,标识符 有内部联系。
因此,func1()
无法从编译单元外部访问 - 它只能在其所在的源文件中使用。