GLIBCXX 3.4.9 не найден
У меня есть проблема, касающаяся libstdc++. so.
Я установил новую версию gcc и попытался скомпилировать код c++. Компиляция работала, но когда я пытаюсь выполнить двоичный файл (m5.opt - это его название) у меня есть следующая ошибка: сборка/ALPHA_SE/М5.опт: в /usr/lib64/libstdc++в.так.6: версия `GLIBCXX_3.4.9' не найден (требуется создать/ALPHA_SE/М5.выбирать).
Нужно ли мне заменить libstdc++.so? и если да, то где я могу скачать нужную версию? На веб-сайте GCC они говорят, что libstdc++ - это теперь это часть ССЗ.
Я надеюсь, что кто-нибудь сможет мне помочь! Я только 4 месяца на Linux сейчас, так что все очень ново для меня.
Макс
Подробности
GCC:
У меня был gcc 4.1.2 раньше, но я скачал gcc 4.2.4. Из неиспорченного gcc-каталога я выполнил"./настроить"; "принять"; "установка".
Когда я попытался использовать gcc или g++ для компиляции, его версия по умолчанию все еще была 4.1.2. Чтобы преодолеть это, Я заменил некоторые ссылки:
mv / usr / bin/gcc / usr/bin / gcc_bak
ln-s /usr / local/bin/gcc gcc
mv / usr / bin / g++ / usr/bin / g++_bak
ln-s / usr / local/bin/g++ g++
GLIBC (++) -- libstdc++:
в /usr/lib64/libstdc++в.так.6 -> с libstdc++.так.6.0.8
/usr/местные/библиотека/с libstdc++.так -> с libstdc++.так.6.0.9
/Либ/библиотеки libc.так.6 -> файл libc-2.5.так -> файл libc-2.5.так
Linux-версия:
uname-a дает:
Linux madmax 2.6.18-128.4.1.el5 #1 SMP Вт Aug 4 12: 51: 10 EDT 2009 x86_64 x86_64 x86_64 GNU / Linux
3 ответа:
Проблема в том, что вы неправильно построили свой новый
GCC
: в Linux вы должны использоватьПрефикс установки по умолчанию -./configure --prefix=/usr
/usr/local
, поэтомуmake install
помещает двоичные файлыgcc
иg++
в/usr/local/bin
и т. д.То, что происходит с вами сейчас, заключается в том, что вы компилируете и связываете с помощью нового (symlinked)
Есть несколько исправлений, которые вы могли бы сделать.GCC 4.2.4
, но во время выполнения ваша программа привязывается к старому/usr/lib64/libstdc++.so.6
(версия 6.0.8 вместо требуемой 6.0.9). Вы можете подтвердить это, запустивldd build/ALPHA_SE/m5.opt
: вы должны увидеть, что он использует/usr/lib64/libstdc++.so.6
.env LD_LIBRARY_PATH=/usr/local/lib64 ldd build/ALPHA_SE/m5.opt
Должно показать вам, что настройка
LD_LIBRARY_PATH
достаточна для перенаправления двоичного файла в правильную библиотеку, аLD_LIBRARY_PATH=/usr/local/lib64 build/ALPHA_SE/m5.opt
Надо просто бежать. Вы можете "испечь" этот путь в m5.выберите двоичный файл, повторно связав его с
-Wl,-rpath=/usr/local/lib64
.Более постоянное решение состоит в том, чтобы исправить библиотеки так же, как вы исправили двоичные файлы:
cd /usr/lib64 && mv libstdc++.so.6 libstdc++.so.6_bak && ln -s /usr/local/lib64/libstdc++.so.6 .
Еще лучшим решением является перенастройка нового
GCC
с--prefix=/usr
, а затемmake all install
.
Я знаю, что это очень старый вопрос, но ... ..
Обычно не рекомендуется заменять системный компилятор (то есть компилятор в
/usr
), потому что вся система будет построена с его помощью и зависеть от него.Обычно лучше установить новый компилятор в отдельном месте, а затем просмотреть libstdc++ FAQ Как я могу гарантировать, что динамически связанная библиотека будет найдена? и Поиск динамических или общих библиотек в руководстве по обеспечению правильный libstdc++. so находится во время выполнения.
Другие ответы здесь должны быть прекрасны, но "быстрое и простое" решение, если у вас есть GCC, установленный в /usr / local/, - это просто добавить новые библиотеки в LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
Вы также можете проверить, есть ли у вас правильные версии GLIBC, установленные с помощью
strings /usr/lib/libstdc++.so.6 | grep GLIBC strings /usr/local/lib64/libstdc++.so.18 | grep GLIBC
Я получил этот последний совет с другого форума, так что кредиты должны быть там, где кредиты должны быть!