C++标准对动态链接是否有相关规定及限制要求?
C++标准中的动态链接相关规则与概念
C++标准并没有直接使用“动态链接”这个术语,它用平台无关的抽象概念来覆盖这类场景,以下是具体的对应和规则:
- 标准通过“翻译单元”“外部链接实体”的概念间接支持动态链接场景。比如标准明确提到,具有外部链接的实体可以在“其他程序单元”中定义——这里的“其他程序单元”就包含了动态链接库这类实现层面的载体,不管你是静态链接还是动态链接,只要符合外部链接的规则,就可以跨单元访问实体。
- 关于你提到的隐式链接库中非局部变量的初始化:标准对静态存储期变量的初始化规则(静态初始化、动态初始化的顺序要求)完全适用于动态链接库中的非局部变量。标准只关注变量的存储期和链接属性,不关心它是在可执行文件还是动态库中。比如,动态初始化的非局部变量,在首次使用之前必须完成初始化,这个规则不管变量在哪个载体里都有效。
- 标准对跨单元实体的约束同样覆盖动态链接场景:比如ODR(单定义规则)要求外部链接的实体只能有一个定义,不管这个定义是在可执行文件还是动态库中;另外,不同翻译单元(包括动态库中的)之间的动态初始化顺序是未指定的,除非你用
std::init_priority属性来显式控制。 - 标准之所以不直接提“动态链接”,是因为它是平台无关的规范,而动态链接是操作系统和编译器提供的具体实现特性(比如Windows的DLL、Linux的.so)。标准只会定义所有实现必须遵守的通用规则,把具体的实现细节留给编译器和平台去处理。
内容的提问来源于stack exchange,提问作者pk1234d
相关产品推荐
相关产品推荐

