摘要: 为什么要使用动态链接? 在现代的linux系统中,假设一个普通的程序会使用到c语言静态库至少1MB以上,那么,如果我们的机器运行100个这样的程序,就用浪费近100MB的内存;如果磁盘有2000个这样的程序,就要浪费2GB的内存。 静态链接对程序的更新、发布等也会带来问题。比如程序program1使 阅读全文
posted @ 2013-12-19 15:58 在于思考 阅读(1412) 评论(0) 推荐(0) 编辑
摘要: 链接器在根据命令行中输入的可重定位目标文件和静态库的顺序从左到右的扫描这些文件。在这个扫描中,链接器会维护一个集合E,该集合包含了将来要被合并生产可执行文件的所有可重定位目标文件;维护了一个集合U,包含了未解决的符号(只引用了但还没有定义);还维护了一个集合D,包含被先前输入文件定义的符号。开始的时候这三个集合都为空。对于在命令行中的每个输入文件f,链接器都会去判断这个文件是目标文件还是静态库文件。如果是目标文件,链接器将f加入到集合E中,并将f中的已定义的符号和引用的符号分别加入到集合D和U中,并继续处理下一个文件。如果f是静态库文件,链接器会扫描静态库中的目标文件m,如果m中定义的符号.. 阅读全文
posted @ 2013-12-19 10:20 在于思考 阅读(883) 评论(0) 推荐(0) 编辑