Проблема в том, что вы построили новый GCC
неправильно: в Linux вы должны использовать
./configure --prefix=/usr
Префикс установки по умолчанию: /usr/local
, поэтому make install
помещает gcc
и g++
двоичные файлы в /usr/local/bin
и т. Д.
Что происходит с вами сейчас, так это то, что вы компилируете и связываете, используя новую (символьную) 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
, а затем make all install
.