(solaris) ld: fatal: ... la version 'GCC_4.2.0' n'existe pas

J'essaye de compiler un programme c ++ pour la première fois sur cette machine (ce qui n'est pas le mien), donc j'ai écrit un simple hello world. Ma commande pour compiler obtient une erreur,

>g++ testing.cpp -L/usr/local/lib
ld: fatal: file /usr/local/lib/libgcc_s.so: version 'GCC_4.2.0' does not exist:
    required by file /usr/local/lib/libstdc++.so

mais j'ai quelque chose là:

>file /usr/local/lib/libgcc_s.so
/usr/local/lib/libgcc_s.so:     ELF 32-bit LSB dynamic lib 80386 Version 1 [FPU], dynamically linked, not stripped

Pour les fous rires si je fais l'un de ceux-ci:

>g++ testing.cpp
>g++ testing.cpp -L/usr/sfw/bin
>g++ testing.cpp -L/local/bin

Je reçois la même erreur (le répertoire ne change pas, probablement parce qu'il n'y a pas libgcc_s dans bin?):

ld: fatal: file /usr/local/lib/gcc/i386-pc-solaris2.10/4.3.3/../../../libgcc_s.so: version 'GCC_4.2.0' does not exist:
    required by file /usr/local/lib/gcc/i386-pc-solaris2.10/4.3.3/../../../libstdc++.so

Situé dans /usr/local/lib/gcc/i386-pc-solaris2.10/, je vois 3.4.6 et 4.3.3 .

Et je vois qu'un lien symbolique de /usr/local/lib/libcc_s.so pointe vers libgcc_s.so.1 créé en 2001 ...

J'ai vu ailleurs la façon suivante de vérifier la version, mais elle ne retourne rien:

/usr/local/lib>strings libgcc_s.so.1 | grep GCC

Mes questions sont:

  1. Que se passe-t-il exactement? L'éditeur de liens accepte-t-il les bibliothèques «un peu anciennes» mais rejette-t-il vraiment les anciennes, comme 2001? L'éditeur de liens va-t-il jamais se fâcher au niveau d'une nouvelle version?
  2. Y a-t-il un moyen de dire quelle est la version de libgcc_so?
  3. Puis-je tricher et le forcer à utiliser la version actuellement installée en créant un lien symbolique? Si oui, quel lien symbolique dois-je créer?

Merci de lire et pour tout conseil que vous pouvez donner.

0

2 Réponses

Sensationnel. Je me sens très bête. Tout ce que je devais faire était de spécifier la version particulière de g ++ à utiliser en changeant ma commande pour

/usr/sfw/bin/g++ testing.cpp

Ta-da! Programme compile et s'exécute avec succès.

Dans le cas où quelqu'un d'autre a ce problème, il peut être utile d'exécuter quel g ++ et d'essayer les différentes options.

>which g++ 
g++ is /usr/local/bin/g++
g++ is /usr/sfw/bin/g++
g++ is /local/bin/g++
g++ is /usr/local/bin/g++
g++ is /usr/sfw/bin/g++
g++ is /local/bin/g++
g++ is /usr/local/bin/g++
g++ is /usr/sfw/bin/g++
g++ is /local/bin/g++
g++ is /usr/local/bin/g++
g++ is /usr/sfw/bin/g++ 
g++ is /local/bin/g++
0
ajouté

Je suspecte des bibliothèques de gcc, vérifie la version d'OS (32/64 bit) et installe des bibliothèques de gcc en conséquence.

0
ajouté
Hm. J'essaie d'utiliser les bibliothèques existantes, car elles ont été l'une des machines depuis des années et d'autres programmes ont été compilés il y a quelques années. (Aussi, même si c'est 64 bits, j'ai essayé d'utiliser l'indicateur -m32 dans ma commande de compilation, et cela ne change pas l'erreur.) Merci quand même.
ajouté l'auteur imomushi8, source
btw, la réponse que vous avez donnée ici n'était pas vraiment une réponse ... la prochaine fois peut-être envisager un commentaire à la place.
ajouté l'auteur imomushi8, source