如果我的术语不正确,我提前道歉。
假设我有一个名为libVectorMath.so的共享库。其中有两个有趣的函数,addVector()和subtractVector()。这两个函数都是用vectorMath.h原型化的。我还有一个名为testVectorMath的可执行文件,它使用这两个函数,并动态链接到libVectorMath.so。
一般来说,要构建testVectorMath,我还需要构建libVectorMath.so。为什么会这样呢?头文件vectorMath.h是否不足以告诉testVectorMath它应该在libVectorMath.so中找到哪些符号
换句话说,testVectorMath中不能有一些指令说“查找一个名为libVectorMath.so的库,然后在其中查找名为addVector()和subtractVector()的符号”吗?
发布于 2016-07-05 17:07:52
阅读此link。它以一种非常好的方式讲述了同样的事情!
上面的摘录如下:所有共享库方案基本上是以相同的方式工作的。在链接时,链接器照常在库中搜索,以查找解析其他未定义的外部符号的模块。但是,链接器不是将模块的内容复制到输出文件中,而是记下模块来自哪个库,并将库的列表放入可执行文件中。加载程序时,启动代码会在程序启动之前找到这些库,并将它们映射到程序的地址空间中,如图1所示。标准操作系统文件映射语义会自动共享映射为只读或写入时复制的页面。执行映射的启动代码可能在操作系统、可执行文件、映射到进程地址空间的特殊动态链接器中,或者三者的某种组合中。
https://stackoverflow.com/questions/13204020
复制相似问题