Я недавно обновил Ubuntu с 15.04 по 15.10. Одним из основных отличий между этими версиями является обновление версии gcc по умолчанию с gcc-4.9 -> gcc-5. Библиотека, которую я разрабатываю, была написана и скомпилирована для gcc-4.9 и основана на других библиотеках, которые работают только в gcc-4.9.
Я установил gcc-4.9 на свой компьютер и могу успешно скомпилировать библиотеку и исходный файл. Однако, когда я пытался запустить результирующую программу, я получаю эту ошибку:
terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]'
what(): basic_ios::clear: iostream error
Aborted (core dumped)`
Исходный код и файл, который я пытаюсь прочитать, использовались до обновления. Я пытался использовать -D_GLIBCXX_USE_CXX11_ABI=0
флаг, но я не уверен, что это правильно, также это не работает.
Это пример флагов, которые я сейчас включил в свой make-файл:
CPPFLAGS = -O0 -g3 -Wall -c -fpermissive -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++0x -fPIC -MMD -MP
Есть идеи, которые могут мне помочь?
Вам «просто» нужно перекомпилировать все ваша программа нуждается в C ++.
См. Например вики Debian о переходе который имеет (среди прочего)
Хорошей новостью является то, что GCC 5 теперь обеспечивает стабильный ABI libcxx11 и стабильную поддержку C ++ 11 (версия GCC до 5 назвала это поддерживаемым экспериментальным). Это потребовало некоторых изменений в libstdc ++ ABI, и теперь libstdc ++ 6 предоставляет двойной ABI, классический libcxx98 ABI и новый libcxx11 (GCC 5 (<< 5.1.1-20) предоставляет только классический libcxx98 ABI). Плохая новость заключается в том, что (экспериментальная) поддержка C ++ 11 в классическом ABI libcxx98 и новые стабильные ABI libcxx11 несовместимы, и апстрим не предоставляет пути обновления, за исключением восстановления
Там нет ярлыка.
Других решений пока нет …