未定义的对通过静态库中调用的同一文件中定义的函数的引用
Undefined reference to Function defined in same .c file invoked through static library
此静态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的源文件中使用。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- C++编程从外部文本文件定义数组大小
- MAKE:找不到包含的用户定义的头文件?
- 定义C++新的环境变量并在 bat 文件中使用它
- 在头文件中定义变量不会出错
- 即使我没有包含多个文件,C++中的多个定义错误
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 将文件复制到自定义位置,存在字符串转换问题
- 如何正确定义C++类析构函数并将其链接到主文件?
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- 从头文件定义嵌套类
- 使用标头文件定义MT19937和normal_distribution
- 为特定文件定义
- 从.h和.cpp文件定义纯虚拟函数会产生链接器错误吗
- C 编程从外部输入文件定义数组大小
- 编译头文件定义了一个模板类,该类还包括其他头文件