【问题标题】:Does IBM XL C/C++ provide an init_priority?IBM XL C/C++ 是否提供 init_priority?
【发布时间】:2018-04-21 13:56:15
【问题描述】:

我们使用 C++ 静态初始化顺序来控制 C++ 库中多个对象的构造。 GCC 提供init_priority,微软提供init_seg()

我正在寻找与 IBM 的 XL C/C++ 编译器类似的东西,但我的搜索结果并未显示有用的匹配结果。编译器可在 Linux 和 AIX 上运行。显然 Linux 提供了该功能,但我不确定 AIX 运行时支持。

我的第一个问题是,AIX 平台是否支持初始化优先级?

我的第二个问题是,IBM 的 XL C/C++ 是否提供了一种通过源代码控制它的方法?

【问题讨论】:

  • 听起来你应该能够通过挖掘 xlc 文档找到答案。你试过搜索吗?或者,如果您有问题,请联系 IBM 支持。
  • @JesperJuhl - “您是否尝试过搜索 [xlc docs]” - 是的,我已经阅读过 AIX 和 Linux 手册,但我没有找到它.我想知道它是否有不同的名称,或者我是否认为它在不可用时可用。 Linux xlC 编译器似乎应该有它。
  • 你能把初始化移动到一个文件中,并按照你想要的顺序放置它们吗? (使用适当的命名空间语句等)

标签: c++ aix static-initialization xlc static-order-fiasco


【解决方案1】:

IBM XL C/C++ for Linux V13.1.1 及更高版本确实提供了一种控制初始化优先级的方法,请参阅Knowledge Center 了解有关如何通过类似于 GCC 的init_priority 变量属性控制它的更多详细信息,它在对象级别分配静态初始化优先级。

IBM XL C/C++ for AIX 不支持 init_priority,但它确实提供了一种方法来控制同一链接单元内的 .o 文件之间的全局变量初始化顺序与 -qpriority#pragma priority。有关这些选项的详细信息,请访问 Knowledge Center。此外,-qmkshrobj=priority (Knowledge Center) 控制程序启动时共享对象(和 a.out)的初始化顺序(XL AIX 使用此方法,而 XL Linux 使用依赖关系来确定共享对象初始化顺序)。翻译单元中的顺序必须是声明性顺序,否则您可以获得引用尚未初始化的变量的初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2023-03-22
    • 2014-01-06
    相关资源
    最近更新 更多