// main.c
#include "test.h"
int main(){
test();
return 0;
}
// test.h
#include<iostream>
using namespace std;
void test();
// test.c
#include "test.h"
void test(){
cout<< "test!" <<endl;
}
1. gcc -o main main.o test.o
【扩展】:其实上面为了让大家更加清楚底层原因,我把编译链接分开了,下面这样编译 也会报undefined reference错,其实底层原因与上面是一样的。 gcc -o main main.c //缺少test()的实现文件 需要改成如下形式才能成功,将test()函数的实现文件一起编译。 gcc -o main main.c test.c //ok,没问题了
在此,只举个静态库的例子,假设源码与上述一致。
1. 把test.c编译成静态库:
gcc -c test.c
sr -rc test.a test.o
gcc -c main.c
2. 生成可执行程序:
gcc -o main -main.o
此时同样出现 undefined reference to `test'报错。其根本原因也是找不到test()函数的实现文
件,由于该test()函数的实现在test.a这个静态库中的,故在链接的时候需要在其后加入test.a这个
库,链接命令修改为如下形式即可。
1. gcc -o main main.c ./test.a
这种问题也非常的隐蔽,不仔细研究你可能会感到非常地莫名其妙。我们依然回到第3小节所讨论 的问题中,在最后,如果我们把链接的库的顺序换一下,看看会发生什么结果? 1. gcc -o main main.o func.a test.a 我们会得到如下的编译错误: 1. test.a(test.o): In function `test': 2. test.c:(.text+0x13): undefined reference to `func' 3. collect2: ld returned 1 exit status 因此,我们需要注意,在链接命令中给出所依赖的库时,需要注意库之间的依赖顺序,依赖其他库 的库一定要放到被依赖库的前面,这样才能真正避免undefined reference的错误,完成编译链接。
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有