我们经常说编译不过,这里的编译应该是个笼统的大的概念。
参考博文:
http://blog.chinaunix.net/uid-26548237-id-3839979.html
编译生成的的是汇编语言,.S文件,可以编译命令g++ -s
汇编生成的是目标文件, .o文件,g++ -o,o的意思应该是object,目标的意思
链接是将各个目标文件.o组装起来。
每个目标文件还提供了三个表:未解决符号表、导出符号表、地址重定向表。
(1)未解决符号表提供了所有在该编译单元里引用但是定义并不是在本编译单元的符号以及其出现的地址;
(2)导出符号表提供了本编译单元具有定义,并且愿意提供给其他单元使用的符号及其地址;
(3)地址重定向表提供了本编译单元所有对自身地址的引用的记录;
编译器将extern声明的变量置入未解决符号表,而不置入导出符号表;—-外部链接
编译器将static声明的全局变量不置入未解决符号表,也不置入导出符号表,因此其他单元无法使用;—-内部链接
普通变化及其函数被置入导出符号表;
http://blog.chinaunix.net/uid-26548237-id-3840099.html
.a、.o、.so、.elf
.elf -executable linkable format 可执行文件格式
objdump命令查看目标文件内容,比如-s:查看符号表
编译和链接
最新推荐文章于 2024-12-06 08:45:55 发布