Вот минимальный код, который вызовет ошибку сегментации.
#include<vector>
int main() {
std::vector<double> a;
a.resize(10);
return 0;
}
Очевидно, в этом коде нет ничего плохого. Я запустил его на нескольких системах без проблем, но он вызывает ошибку сегментации на моем рабочем компьютере.
Код компилируется с использованием g ++ file.cpp в системе, в которой работает openSUSE 11.1. Я знаю, что это более старая ОС, но мне не разрешено обновлять или переустанавливать. Единственное, для чего у меня есть разрешения — это zypper (утилита командной строки для установки и удаления программ).
Я предполагаю, что это как-то связано с библиотеками c ++. Я попытался переустановить все, что я могу придумать, связанные с gcc / g ++ и libstdc ++, но я все еще вижу ту же проблему.
Кто-нибудь видел что-то подобное раньше? Есть идеи?
Спасибо!
Где вы собрали и связали приложение? И с чем
опции? Если вы динамически связываете стандарт C ++
библиотека, вы можете легко столкнуться с проблемами; стандарт C ++
библиотека несколько раз менялась способами, которые нарушают бинарный
совместимость и двоичная совместимость могут зависеть от
опции компилятора. В общем, вы должны использовать
опции -static-libstdc++
при строительстве, чтобы избежать такого
проблемы. (Обратите внимание, что то же самое не верно для системы
библиотеки, где динамическое связывание является предпочтительным.)
Других решений пока нет …