GLIBCXX_3.4.9, не найденный

У меня есть проблема относительно libstdc++.so.

Я установил новую версию gcc и попытался скомпилировать код C++. Компиляция работала, но когда я пытаюсь выполнить двоичный файл (m5.opt его имя), у меня есть следующая ошибка:

build/ALPHA_SE/m5.opt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by build/ALPHA_SE/m5.opt).

Сделайте я должен заменить libstdc++.so? И если так, где я могу загрузить версию, я хочу? На GCC-веб-сайте они говорят, что libstdc ++ является частью gcc теперь.

Подробнее

GCC: у Меня был gcc 4.1.2 прежде, но я загрузил gcc 4.2.4. Из непросмоленного gcc-каталога я выполнился ./configure; сделайте; sudo делают установку'. То, когда я пытался использовать 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++.so.6 -> libstdc++.so.6.0.8
/usr/local/lib/libstdc++.so -> libstdc++.so.6.0.9
/lib/libc.so.6 -> libc-2.5.so -> libc-2.5.so

Версия Linux: uname -a дает:

Linux madmax 2.6.18-128.4.1.el5 #1 SMP Tue Aug 4 12:51:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

22
задан Max 14 May 2019 в 01:11
поделиться

1 ответ

Проблема в том, что вы неправильно построили свой новый GCC: на Linux вы должны использовать

./configure --prefix=/usr

По умолчанию установочный префикс - /usr/local, поэтому поместите исполняемые файлы 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.opt, перекомпоновав его с -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, а затем сделать всю установку .[1111180].

26
ответ дан 29 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: