对通过静态库调用的同一.c文件中定义的函数的未定义引用 此静态C库(LIABABC)与C++程序连接。p>

对通过静态库调用的同一.c文件中定义的函数的未定义引用 此静态C库(LIABABC)与C++程序连接。p>,c++,c,linker,qmake,C++,C,Linker,Qmake,在qmake的pro文件中,我使用了LIBS+=pathToLib/libabc.a 我在创建静态库时没有遇到任何问题。 使用qmake和gmake编译和运行cpp应用程序时,会创建其他cpp文件的对象文件,但我遇到以下错误: 。/abc/libabc.a(mdl.o):在函数“SetExt”中: abc/src/mdl.c:2186:未定义对“func1”的引用 在mdl.c中,声明和定义都存在。 静态void func1(int*,char*,char*) 静态void func1(int

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

。/abc/libabc.a(mdl.o):在函数“SetExt”中:
abc/src/mdl.c:2186:未定义对“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 *);
根据6.2.2标识符的链接,第3段:

如果对象或对象的文件作用域标识符的声明 函数包含存储类说明符
static
,即标识符 有内在联系


因此,
func1()。这意味着链接器稍后会变得混乱。我不是你应该告诉的那个人though@UKMonkey,谢谢你提供的信息。有什么资料可以读吗?@不可数是的,我知道这一点。。但我的疑问是,既然这个函数是在定义它的特定c文件中调用的,那么为什么会抛出错误呢?在mdl.c中,func1()被声明、定义和调用。。。这个函数在任何cpp文件中都没有被调用…你的意思是说我甚至不能将这个对象文件链接到其他程序,即使这个函数在cpp程序中没有被调用?@vinu960你是如何编译代码的?您标记了C和C++,但只提到C代码。你忘了什么地方有一个
外部“C”…