您的位置:首页 > 编程语言 > C语言/C++

【C语言】【unix c】如何将多个源文件拼接成一个可执行文件?

2017-08-10 22:44 260 查看
如何将多个源文件拼接成一个可执行文件? (在tmath文件夹下的程序下做实验)

1、先将上面实验文件都编译成.o文件
【nm 二进制文件名】命令可以察看二进制文件中的符号(函数的名字,全局变量的名字 ,静态局部变量的名字)

2、先对单独的编译好的二进制文件察看链接情况:(T代表有这些函数的代码,u代表没有,只是留有位置无法执行)

察看:t_add.o文件

命令: tarena@ubuntu:~/day/day23/tmath$ nm t_add.o
结果: 00000000 T t_add
0000000e T t_sub
分析: 由结果可以看出文件中的两个函数名显示出来,前面用T标示,表示这两个函数是有源程序的,即已实现,有程序了

察看:主函数文件

命令: tarena@ubuntu:~/day/day23/tmath$ nm t_math.o
结果: 00000000 T 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说明各个函数的源程序均已链接成功

知识点补充:链接分为动态链接,静态链接
静态是在编译时就将程序载入,例如程序员编写的
动态是在程序运行时需要用到该程序了才会载入,例如标准输出输入函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unix c语言