Понимание версии gcc и версий GLIBC, GLIBCXX более подробно - PullRequest
2 голосов
/ 27 июня 2019

Предположим, у меня есть следующая локальная версия gcc, g ++:

$ gcc -v
$ g++ -v
gcc version 6.3.1

Я не понимаю отношение и значение следующего по сравнению с моей версией компилятора:

К чему это относится?

/usr/lib64/libstdc++.so.6

Попытка запустить двоичный файл, и я получаю эту ошибку, что означает GLIBCXX_3.4.20? почему число начинается с 3?

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

Что все это значит?

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19

Как насчет ldd версии?

ldd --version
ldd (GNU libc) 2.17

Я не могу связать все эти номера версий вместе.

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Я не могу связать все эти номера версий вместе.

Как уже упоминалось в комментариях, на странице ABI указывается связь между версиями GLIBCXX_... и g++. GLIBCXX_3.4.20 соответствует g++-4.9.0.

Поскольку у вас есть g++-6.3.1, вы должны иметь версию libstdc++.so.6 с GLIBCXX_3.4.22, но у вас явно нет.

Похоже, у вас есть несколько версий libstdc++.so.6: одна в /lib64, а другая в /usr/lib64. Я предполагаю, что один из них старый, и его вообще не должно быть в системе.

P.S. Версия GLIBC не имеет отношения к вашей проблеме ничего и не имеет значения.

0 голосов
/ 06 июля 2019
Версии символов

GLIBC_ и GLIBCXX_ не имеют внутренней связи. GLIBC_ принадлежит glibc, а GLIBCXX_ - libstdc ++. libstdc ++ может быть собран из множества разных версий glibc, и это может привести к разным ссылкам GLIBC_ версии, но набор версий GLIBCXX_ при этом не изменяется.

...