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

У меня есть программа, которую я компилирую с помощью 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

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


person boothby81    schedule 17.10.2012    source источник
comment
Я знаю, что это отстой, и это не то, что вы хотите услышать, но если вам нужно запустить код на более старой версии glibc/libstdc++, скомпилируйте код в системе с самой старой версией, которая вам нужна. Старые библиотеки и новые компиляции просто несовместимы, и замена или замена libc/libstdc++ в Linux обычно наносит вам удар в спину, когда вы меньше всего этого ожидаете.   -  person rubenvb    schedule 17.10.2012


Ответы (1)


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

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

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

person Jonathan Wakely    schedule 17.10.2012