如何将多个源文件拼接成一个可执行文件? (在tmath文件夹下的程序下做实验)
1、先将上面实验文件都编译成.o文件
【nm 二进制文件名】命令可以察看二进制文件中的符号(函数的名字,全局变量的名字 ,静态局部变量的名字)
2、先对单独的编译好的二进制文件察看链接情况:(T代表有这些函数的代码,u代表没有,只是留有位置无法执行)
察看:t_add.o文件
命令: tarena@ubuntu:~/day/day23/tmath$ nm t_add.o
结果: 00000000T t_add
0000000e T t_sub
分析: 由结果可以看出文件中的两个函数名显示出来,前面用T标示,表示这两个函数是有源程序的,即已实现,有程序了
察看:主函数文件
命令: tarena@ubuntu:~/day/day23/tmath$ nm t_math.o
结果: 00000000T main
U printf
U t_add
U t_div
U t_mul
U t_sub
分析: 由结果可以看出在主函数的测试文件中需要的函数已经包含进来了,但是除了主函数,其他函数均处于未实现,即没有源程序只是留有位置的状态(U)
察看:链接后的文件:
命令: tarena@ubuntu:~/day/day23/tmath$ nm a.out
结果: (省略n行)
08048404 T main
U printf@@GLIBC_2.0
080483e4 T t_add
08048504 T t_div
080484f8 T t_mul
080483f2 T t_sub
分析: 由结果可以看出出来printf函数均变为了T说明各个函数的源程序均已链接成功
知识点补充:链接分为动态链接,静态链接
静态是在编译时就将程序载入,例如程序员编写的
动态是在程序运行时需要用到该程序了才会载入,例如标准输出输入函数