首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一个应用程序链接到一个共享库,为什么在编译时需要这个库?

如果一个应用程序链接到一个共享库,为什么在编译时需要这个库?
EN

Stack Overflow用户
提问于 2012-11-03 06:43:19
回答 1查看 102关注 0票数 2

如果我的术语不正确,我提前道歉。

假设我有一个名为libVectorMath.so的共享库。其中有两个有趣的函数,addVector()subtractVector()。这两个函数都是用vectorMath.h原型化的。我还有一个名为testVectorMath的可执行文件,它使用这两个函数,并动态链接到libVectorMath.so

一般来说,要构建testVectorMath,我还需要构建libVectorMath.so。为什么会这样呢?头文件vectorMath.h是否不足以告诉testVectorMath它应该在libVectorMath.so中找到哪些符号

换句话说,testVectorMath中不能有一些指令说“查找一个名为libVectorMath.so的库,然后在其中查找名为addVector()subtractVector()的符号”吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-05 17:07:52

阅读此link。它以一种非常好的方式讲述了同样的事情!

上面的摘录如下:所有共享库方案基本上是以相同的方式工作的。在链接时,链接器照常在库中搜索,以查找解析其他未定义的外部符号的模块。但是,链接器不是将模块的内容复制到输出文件中,而是记下模块来自哪个库,并将库的列表放入可执行文件中。加载程序时,启动代码会在程序启动之前找到这些库,并将它们映射到程序的地址空间中,如图1所示。标准操作系统文件映射语义会自动共享映射为只读或写入时复制的页面。执行映射的启动代码可能在操作系统、可执行文件、映射到进程地址空间的特殊动态链接器中,或者三者的某种组合中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13204020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档