2013-12-20 5 views
1

Я столкнулся с Bug 58800 в libstdc++, что приводит к тому, что некоторые из моих кодов являются segfault. У меня есть обходной путь, но я не хочу использовать его, когда доступна фиксированная версия libstdc++. Каков правильный способ проверить версию libstdc++ (через ifdef)? И, в идеале, на какие версии влияет эта ошибка?Определите версию libstdC++

ответ

1

libstdC++ поставляется с GCC, так что правильный путь, чтобы проверить версию GCC, с помощью тестирования его __GNUC__, __GNUC_MINOR__ и __GNUC_PATCHLEVEL__predefined macros.

Если вы используете libstdC++ с Clang, вы можете проверить, был ли __GLIBCXX__ > 20131020UL, который является датой исправления ошибки. Релиз после этой даты должен содержать исправление.

1

Вы можете использовать макрос __GLIBCXX__, чтобы проверить информацию о версии для libstdc++. (Существует список значений в разделе 7 раздела ABI Policy Appendix.)

Ошибка заканчивается списком версий, которые были исправлены, но выяснение того, когда была введена ошибка, может быть сложнее. Если вы использовали autoconf, я бы предложил написать тест, который разбился, если ошибка присутствовала.

+0

Я видел список в приложении ABI Policy, но он не подходит достаточно далеко. Проблема исправлена ​​в 4.8.3, но список останавливается на 4.8.0. Тест - отличная идея, мне нужно исследовать ее лучше. – foxcub

+0

@foxcub: если у вас есть 4.8.3, вы можете просто посмотреть, на что установлен макрос, нет? Это ничего не изменит раньше. – rici

+0

У меня нет 4.8.3, что является проблемой. Но все в порядке, я просто подожду и посмотрю. – foxcub

Смежные вопросы