Попытка использовать новый libstdc++ на старой машине вызывает ошибку

63
6

У меня есть программа, которую я компилирую с помощью CMake на машине A, но я хочу запустить ее на старой машине B. Когда я это сделаю, я получаю следующее:

/usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.11' not found (required by ./program)
/usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.14' not found (required by ./program)
/usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by ./program)

Я видел этот вопрос, и я думаю, что лучший способ решить мою проблему - скопировать новую версию на машину B. Поэтому я скопировал /usr/lib/libstdc++.so.6libstdc++.so.6.0.14) от A до ~/lib на B и

export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH

после этого. Когда я начинаю свою программу, я получаю

Floating point exception

Что я могу сделать, чтобы он работал?

спросил(а) 2021-01-25T16:21:58+03:00 4 месяца, 3 недели назад
1
Решение
99

Как вы обнаружили, вам нужно иметь новый libstdc++.so.6 присутствующий в старой системе, и сообщить динамическому компоновщику, как его найти.

См. Как я могу гарантировать, что динамически связанная библиотека будет найдена? в разделе libstdc++ FAQ и " Поиск динамических или общих библиотек" в руководстве для получения подробной информации о том, как убедиться в его наличии, с несколькими вариантами. LD_LIBRARY_PATH - это только один из вариантов.

Исключение с плавающей запятой не должно быть связано с libstdc++, вам нужно будет использовать отладчик, чтобы найти, откуда оно взялось, и получить более подробную информацию.

ответил(а) 2021-01-25T16:21:58+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема