Comment trouvez-vous quelle est la version de bibliothèque libstdc++ est installé sur votre machine linux?
J'ai trouvé la commande suivante: strings /usr/lib/libstdc++.so.6 | grep GLIBC
de ici. Il semble que le travail, mais c'est un ad-hoc/méthode heuristique.
Est-il une commande spécifique qui peut être utilisé pour interroger la version de la bibliothèque C++? Ou est la méthode que j'ai trouvé la méthode acceptée?
Vous devez vous connecter pour publier un commentaire.
À trouver la bibliothèque est utilisé, vous pourriez exécuter
La liste des versions compatibles pour libstdc++ version 3.4.0 et ci-dessus est fourni par
Pour les versions antérieures le symbole
GLIBCPP
est défini.La date du cachet de la bibliothèque est définie dans une macro
__GLIBCXX__
ou__GLIBCPP__
selon la version:La table des timbres à date de libstdc++ versions est répertorié dans la la documentation:
Le mécanisme, j'ai tendance à utiliser est une combinaison de
readelf -V
pour vider les.gnu.version
informations de la bibliothèque libstdc++, puis une table qui correspond à la plus grandeGLIBCXX_
valeur extraite.si votre version de
sort
est trop vieux pour avoir la-V
option (qui trie par numéro de version), alors vous pouvez utiliser:au lieu de la
sort -u -V
, pour trier jusqu'à la version 4 chiffres.En général, correspondant à la version d'ABI devrait être assez bon.
Si vous essayez de repérer les
libstdc++.so.<VERSION>
, cependant, vous pouvez utiliser un peu de bash comme:donc pour mon système, cela a donné
6.0.10
.Si, cependant, vous essayez d'obtenir un binaire compilé sur systemX à travailler sur systemY, ces sortes de choses ne fera que vous obtenez jusqu'à présent. Dans ces cas, la réalisation, le long d'une copie de la libstdc++.c'était donc utilisé pour l'application, et puis d'avoir un exécuter un script qui fait un:
fonctionne, en général, autour de la question de l' .c'est donc sur la boîte étant incompatible avec la version de l'application. Pour plus de différences extrêmes dans l'environnement, j'ai tendance à ajouter tous les bibliothèques dépendantes jusqu'à ce que l'application fonctionne correctement. C'est l'équivalent linux de travail autour de ce qui, pour windows, serait considéré comme l'enfer des dll.
ident
ouwhat
sur le fichier de la bibliothèque pour trouver la version embarquée d'info?ident
ne le lâche équivalent d'unstrings -a <file> | grep '\$.*\$'
,what
utilise l'équivalent destrings -a <file> | fgrep '@(#)'
, ni de déterminer les informations de version de la bibliothèque sous-jacente si ces chaînes ne sont pas compilés dans. En s'appuyant sur l'ABI d'information fait beaucoup plus de sens que si vous essayez de déterminer la compatibilité, car il est généralement bouilli dans la construction, tandis que d'ident/ce que les chaînes ont tendance à être omisExactement ce que vous voulez savoir?
La bibliothèque partagée soname? C'est la partie du nom de fichier,
libstdc++.so.6
, ou indiqué parreadelf -d /usr/lib64/libstdc++.so.6 | grep soname
.La mineure numéro de révision? Vous devriez être en mesure d'obtenir que par une simple vérification de ce que le lien symbolique pointe vers:
Qui vous dit qu'il est 6.0.16, qui est le 16e de la révision de la
libstdc++.so.6
version, ce qui correspond à laGLIBCXX_3.4.16
symbole versions.Ou voulez-vous dire la libération, il vient d'où? Il fait partie de la GCC donc c'est la même version que la version de GCC, de sorte que si vous avez foiré votre système en installant inégalée versions de
g++
etlibstdc++.so
vous pouvez obtenir à partir de:Ou, sur la plupart des distributions, vous pouvez simplement demander le gestionnaire de paquet. Sur ma Fedora hôte qui
Comme d'autres réponses ont dit, vous pouvez mapper les rejets de versions de la bibliothèque en cochant l'ABI docs
Vous pouvez utiliser
g++ --version
en combinaison avec la GCC ABI docs pour le savoir.