2016-10-10 2 views
4

Ich habe ein einfaches „Hallo Welt“ Stil-Programm, das ich mit Klirren ++ auf FreeBSD bin Kompilieren:Warum ist clang ++ mit gcc verlinken?

#include <cstdlib> 
#include <iostream> 

using namespace std; 

int main(int argc, char* argv[]) { 
    cout << "Oh, hello" << endl; 
    return EXIT_SUCCESS; 
} 

Was ich mit Klirren ++ kompilieren und seinen libC++:

$ clang++ -stdlib=libc++ -v ohhello.cpp 
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM 3.8.0) 
Target: x86_64-unknown-freebsd11.0 
Thread model: posix 
InstalledDir: /usr/bin 
"/usr/bin/clang++" -cc1 -triple x86_64-unknown-freebsd11.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name ohhello.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -v -dwarf-column-info -debugger-tuning=gdb -resource-dir /usr/bin/../lib/clang/3.8.0 -internal-isystem /usr/include/c++/v1 -fdeprecated-macro -fdebug-compilation-dir /usr/home/mike/projects/ohhello -ferror-limit 19 -fmessage-length 80 -fobjc-runtime=gnustep -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/ohhello-050a75.o -x c++ ohhello.cpp 
clang -cc1 version 3.8.0 based upon LLVM 3.8.0 default target x86_64-unknown-freebsd11.0 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/include/c++/v1 
/usr/bin/../lib/clang/3.8.0/include 
/usr/include 
End of search list. 
"/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 --hash-style=both --enable-new-dtags -o a.out /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/lib /tmp/ohhello-050a75.o -lc++ -lm -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/crtend.o /usr/lib/crtn.o 

Im Linker Schritt Ich sehe "-lgcc" und "-lgcc_s" mehrmals. Warum versucht clang ++, gegen gcc zu verlinken, wenn es libC++ (nicht libstdC++) benutzt?

Dank

Antwort

5

libgcc ist nicht gcc. Es ist ein kleines, non compiler-specific C library. Es wird von gcc zur Verfügung gestellt, ist aber nicht spezifisch für den Compiler.

+0

Danke für die Erklärung. Es sieht so aus, als ob LLVM anstelle von libgcc Compiler-rt hat, aber standardmäßig libgcc benutzt? – SonOfFlyingPig

Verwandte Themen