Czy g++ jest zarówno kompilatorem c++ jak i linkerem?
Patrzyłem na wyjście z mojej kompilacji w Eclipse. Zestawiam procesor ColdFire. Linia kompilacji wygląda tak:
m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...
Po którym następuje plik include, oczywiste flagi "kompilatora" i na koniec jeden plik źródłowy, który zmieniłem. Następna linia ponownie wywołuje to samo narzędzie:
m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....
Po których następuje więcej .o files some .pliki ld i inne .akta. Wygląda na to, że łączy ze sobą wszystkie typy plików obiektowych.
W Gnu rodzina czy g++ to jakaś aplikacja, która na podstawie argumentów może określić czy musi kompilować czy linkować? Czy ma wbudowane obie możliwości, czy tylko wysyła kompilację do gcc i linkuje do ld, a mój log tego nie pokazuje?
3 answers
g++
i gcc
są } kierowcami. Zwykle uruchamiają preprocesor (cpp
), kompilator właściwy (cc1plus
dla C++ i cc1
dla C) oraz linker (gold lub GNU LD) i wszystkie inne niezbędne rzeczy. Różnica pomiędzy gcc
i g++
polega na tym, że ta ostatnia zawiera jedną dodatkową bibliotekę do połączenia z (libstdc++
).
W zależności od typu pliku, na którym są wywoływane, mogą pominąć niektóre kroki lub zrobić rzeczy inaczej. Dla plików .o
, nie trzeba uruchamiać WŁAŚCIWEGO kompilatora lub na przykład preprocesor.
Jeśli przekażesz im -###
, możesz zobaczyć, jak drukuje narzędzia, które wywołuje w każdym kroku jego wykonania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-22 19:52:38
Zaczerpnięte z tego małego poradnika GCC :
Na podstawie rozszerzenia pliku, które podałeś programowi, wybiera odpowiednie polecenia, które musi uruchomić, aby włączyć źródło, które podałeś, do określonego pliku wyjściowego.
Z ładnym małym flowchartem tego, co dokładnie robi GCC, w zależności od rozszerzeń plików:
input extensions runs if output
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-22 20:43:49
Wysyła linkowanie do ld.
Zobacz też: Jak uzyskać polecenie GCC linker?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:01