2

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

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

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

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

4

1 回答 1

1

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

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

于 2016-07-05T09:07:51.503 回答