Предоставляет ли IBM XL C/C++ init_priority?
Мы используем статический порядок инициализации C++ для управления созданием нескольких объектов в библиотеке C++. GCC предлагает init_priority
и Microsoft предлагает init_seg()
,
Я ищу подобное с компилятором IBM XL C/C++, но мои результаты поиска не показывают полезных хитов. Компилятор работает как в Linux, так и в AIX. Очевидно, что Linux предлагает эту функцию, но я не уверен в поддержке AIX во время выполнения.
Мой первый вопрос: поддерживает ли платформа AIX приоритеты инициализации?
Мой второй вопрос: предлагает ли IBM XL C/C++ способ управления им с помощью исходного кода?
1 ответ
IBM XL C/C++ для Linux V13.1.1 и выше предлагает способ управления приоритетами инициализации. Более подробную информацию о том, как управлять им через init_priority
переменный атрибут, аналогичный GCC, который назначает статические приоритеты инициализации на уровне объекта.
IBM XL C/C++ для AIX не поддерживает init_priority
но он предлагает способ управления порядком инициализации глобальных переменных между файлами.o в пределах одного блока ссылок с помощью -qpriority
а также #pragma priority
, Подробную информацию об этих опциях можно найти в Центре знаний. К тому же, -qmkshrobj=priority
( Центр знаний) контролирует порядок инициализации общих объектов (и a.out) при запуске программы (XL AIX использует этот метод, тогда как XL Linux использует зависимость для определения порядка инициализации общих объектов). Порядок в модуле перевода должен быть в декларативном порядке, иначе вы можете получить инициализацию, ссылаясь на переменную, которая еще не была инициализирована.