我们使用C++静态初始化顺序来控制C++库中几个对象的构造。 GCC提供 init_priority
,而Microsoft提供 init_seg()
。
我正在寻找与IBM的XL C / C++编译器类似的文件,但我的搜索结果并未显示有用的搜索结果。编译器可在Linux和AIX上运行。显然,Linux提供了该功能,但是我不确定AIX运行时支持。
我的第一个问题是,AIX平台是否支持初始化优先级?
我的第二个问题是,IBM的XL C / C++是否提供一种通过源代码控制它的方法?
最佳答案
适用于Linux V13.1.1及更高版本的IBM XL C / C++确实提供了一种控制初始化优先级的方法,有关如何通过init_priority
变量属性(类似于GCC)对其进行控制的更多详细信息,请参阅Knowledge Center,该属性在GCC处分配静态初始化优先级。对象级别。
用于AIX的IBM XL C / C++不支持init_priority
,但是它确实提供了一种方法来控制使用-qpriority
和#pragma priority
的同一链接单元中.o文件之间的全局变量的初始化顺序。关于这些选项的详细信息可以在Knowledge Center上找到。另外,-qmkshrobj=priority
(Knowledge Center)控制程序启动时共享库(和a.out)的初始化顺序(XL AIX使用此方法,而XL Linux使用依赖关系来确定共享库的初始化顺序)。翻译单元内的顺序必须是声明性顺序,否则您可以引用尚未初始化的变量来进行初始化。
关于c++ - IBM XL C/C++是否提供init_priority?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47187170/