模板实例化和符号解析问题

问题描述 投票:0回答:1

在c++中,标准库是在模板中实现的,这意味着它们将在每个共享库中实例化,必须存在两个库具有相同名称的相同函数,例如

std::vector<std::string>
,不同的库可能都实例化那么当这些库在同一个进程中使用时,链接器如何解析符号,这是否意味着一个库中只使用了一个代码?

例如,如果链接器使用lib a中的实现,当程序结束并且lib a未映射时,是否会导致其他使用实现的lib失败?

c++
1个回答
0
投票

从显而易见的开始:库以一个顺序加载,以相反的顺序卸载,这样非循环依赖就可以工作。

现在再问一个问题:动态链接器如何解析符号以使其不被过早卸载?答案很简单:只使用第一次出现的情况。它将被最后卸载。

请注意,大多数

std::vector<std::string>
方法可能是内联的,并且不会出现在任何库中,正是因为它们是模板。
operator[]
例如,它只不过是简单的加法而已。

© www.soinside.com 2019 - 2024. All rights reserved.