У меня есть проблема относительно 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
Проблема в том, что вы неправильно построили свой новый 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].