关于库文件

xxne2002 2003-09-10 08:29:11
当库中例程被静态链接到程序中,是不是只把用到的函数链接到程序中呀?
我看本书上说用户自建的库,被连接时,是把所有的函数都连接进去了;
而C的标准库函数,连接时,只把所用到的函数连接进去;
当使用一个分别编译的文件时,文件中的所有函数都被装入和链接到程序中去。
不知道他说的对不对?
...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilyy 2003-09-18
  • 打赏
  • 举报
回复
支持大家!
在编译和连接时执行的是不一样的,编译是检查语法了,而连接就是把标准库文件连接到主文件中去
kinogre 2003-09-12
  • 打赏
  • 举报
回复
库中只有被调用的函数代码才会被链入可执行程序中.
你可以自己做一个程序试试啊,写几个有点分量的函数,先是直接放在主程序文件中,看看可执行文件的大小不一.然后把它们编译成库文件,只在主程序中调用库中的一个函数.看看可执行文件的大小.肯定是后面一种的要小的.当然,为了使结果更明显,你要把库做大一点.
晨星 2003-09-10
  • 打赏
  • 举报
回复
静态链接会链接所有被调用到的函数的函数体到最终的可执行文件。
不过需要注意的是,属于系统的API函数不会的,这是个特殊情况。
begginginstorm 2003-09-10
  • 打赏
  • 举报
回复
对于静态链接(static link):
目的:获知在使用静态链接的时候,编译器如何处理导入/导出函数的?
为此做了以下系列实验:
1:建立一个Library Module,输出Library.dll。其导出void Test1(),和void Test2()。
2:建立一个Test Module 输出Test.exe。
实验1:
Test Module静态链接Library.lib,但是没有调用任何Library.lib导出的函数(Test1和Test2)。使用Depends查看,在Module dependency tree view中没有Library.dll。
实验2:
Test Module静态链接Library.lib,调用函数Test1。使用Depends查看,Module dependency tree view 中显示Library.dll。选中Library.dll,Parent import function list view中显示:Test1;Export function list view中显示Test1, Test2。
这表明编译器分析了Test Module对Library Module的函数调用,知道哪些函数被调用,哪些函数没有被调用。
实验3:
在实验2的基础上,删掉Library.dll,再用Depends查看,这是Module dependcency tree view中依然显示Library.dll,但是提示无法找到该文件。选中Library.dll,Parent import function list view中显示Test1,但提示无法解析;Export function list view中没有内容显示。
这一点似乎说明编译的时候,Test Module并没有链接所有Library Module导出的函数,而仅仅是链接了被使用的函数。
实验4:在实验2的基础上,修改Library module,使之仅仅导出Test1,不再导出Test2。对于Test module不作任何修改。编译Library module以后,使用Depends查看Test.exe。发现Module dependency tree view中正常显示Library.dll。选中Library.dll,Parent import function list view中正常显示Test1;Export function list view中正常显示Test1。
这一点似乎验证了实验3的结论。
yhang_wang 2003-09-10
  • 打赏
  • 举报
回复
我的理解是在因为c是分别编译的, 所以每个文件对应的目标文件是连接了所有出现的函数的, 但是在link的时候没有被用到函数会被剔除出去, 不会占用可执行文件的空间.

luohualiushui 2003-09-10
  • 打赏
  • 举报
回复
我的理解是不管是标准库还是自建的库,静态链接都是以文件的形式被编译的

想听听大家的看法,是否真的对标准库函数连接时有特殊处理?
neubird 2003-09-10
  • 打赏
  • 举报
回复
同意楼上各位的观点,应该是只链接被调用到的函数

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧