web-dev-qa-db-fra.com

Clang ++ ne peut pas trouver lstdc ++ après la mise à niveau du système

J'ai un petit projet en C++ qui a été bien compilé jusqu'à la mise à niveau de Xubuntu vers 15.04. Quand j'ai essayé de le reconstruire avec cmake, ce message est apparu au milieu de la sortie:

/usr/bin/ld: cannot find -lstdc++

J'ai donc essayé d'écrire un programme simple pour voir si cmake en était responsable:

int main() {
    return 0;
}

Chose amusante: g++ compile:

$ g++ main.cpp
$ ls
a.out  main.cpp
$ ./a.out
$

mais quand j'essaie d'utiliser clang++...

$ clang++ main.cpp 
/usr/bin/ld: cannot find -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$

Essayer avec clang++ main.cpp -lc++ (comme suggéré ici ) ou avec le drapeau -static ( ici ) donne exactement la même erreur. En cours d'exécution avec -v comme suggéré par clang lui-même, j'obtiens ceci:

$ clang++ main.cpp -v
Ubuntu clang version 3.6.0-2ubuntu1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9.2
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/5.0.1
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7.4
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.2
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.2
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.0.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.2
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.0.1
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
 "/usr/lib/llvm-3.6/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name main.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -Fuse-init-array -target-cpu x86-64 -target-linker-version 2.25 -v -dwarf-column-info -resource-dir /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../../include/c++ -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../../include/c++/x86_64-linux-gnu -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../../include/c++/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0/include -internal-externc-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/ryu/Dropbox/Aperture/working/C/learn-sdl/src -ferror-limit 19 -fmessage-length 100 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/main-efcd57.o -x c++ main.cpp
clang -cc1 version 3.6.0 based upon LLVM 3.6.0 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../../include/c++/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../../include/c++/backward"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../../include/c++
 /usr/local/include
 /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0/include
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
 "/usr/bin/ld" --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../.. -L/usr/lib/llvm-3.6/bin/../lib -L/lib -L/usr/lib /tmp/main-efcd57.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/5.0.1/../../../x86_64-linux-gnu/crtn.o
/usr/bin/ld: cannot find -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$

En conséquence, je n'ai pas pu trouver la source de l'erreur.

J'ai essayé de purger et de réinstaller build-essential, clang et g++, mais sans succès. Je l'ai aussi googlé, mais seulement trouvé ce lien à partir de 2013 (oui, j'ai remarqué que c'était pour Red Hat).

Donc, mes questions sont:

  1. Comment puis-je réparer ça? ( Apparemment, la réinstallation pour la troisième/quatrième fois a résolu ce problème. )

  2. Pourquoi cela est-il arrivé en premier lieu, puisque la seule chose que j'ai faite a été de mettre à niveau le système?

2
Ryu

C'est très bizarre, mais enlever gcc-go paquet m'a aidé.

1
vladon

Vérifiez si vous avez lié stdc ++ correctement. Par exemple. essayez de construire par g ++, et utilisez ldd pour vérifier où se trouve la bibliothèque. Ensuite, vérifiez si la hiérarchie des liens est complète, par exemple. (pour stdc ++):

lrwxrwxrwx 1 root root   40 cze 14 12:34 /usr/lib/x86_64-linux-gnu/libstdc++.so -> libstdc++.so.6
lrwxrwxrwx 1 root root   19 maj 11 02:36 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.22
-rw-r--r-- 1 root root 1,6M maj 11 03:05 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22

Sur Ubuntu, il manque parfois (probablement vous ne l'avez pas d'abord).

0
Pajączek