Gladoo
Gladoo
#programowanie #cpp
Które narzędzie procesu kompilacji tworzy pliki obiektowe, assembler czy linker?
  • Najlepsze
  • Wszystkie komentarze
S.....e
@Gladoo: Assembler, linker dopiero konsoliduje pliki obiektowe
r00ti
r00ti
0
@Gladoo: przedostatni krok kompilatora przed linkowaniem czyli zamiana asemblera na kod maszynowy.
M.....f
M.....f
Gladoo
Gladoo
Gladoo Autor
0
@Szumimiwelbie: @r00ti: czym różnią się pliki obiektowe od plików assemblera? Są to po prostu przetłumaczone komendy assemblera na binarkę?
jalop
jalop
0
@Gladoo: pliki asemblera to po prosto kod przed przetłumaczeniem , natomiast obiektowe to kod maszynowy.
Gladoo
Gladoo
Gladoo Autor
0
@jalop: po cholerę więc generować pliki asemblera, nie lepiej od razu do obiektowych?
Gladoo
Gladoo
Gladoo Autor
0
@Malkof: przecież generowanie kodu czytelnego asemblera jest zupełnie niepotrzebne. Można od razu wygenerować kod maszynowy dużo łatwiej, a jak ktoś już chciałby sobie poczytać te pliki assemblera, to wtedy je generować przy pomocy -S
M.....f
M.....f
@Gladoo: Tak jest prościej.
longstar
longstar
@Gladoo: tak jest łatwiej, kod assemblera jest później tłumaczony na poszczególne op code dla konkretnej platformy architektury
Saly
Saly
0
@Gladoo: clang tak robi by default https://www.embecosm.com/appnotes/ean10/html/ch02.html , w przypadku gcc nie wiem. Tak czy owak taka konwersja jest pewnie szybka. Trzeba też pamiętać, że kompilatory to skomplikowane bestie i takie zmodularyzowanie może mieć sens w przypadku testowania i weryfikowania wyników nawet, gdy odbija się to wydajnościowo
M.....f
M.....f
@Saly: @Gladoo: LLVM jest dobrym przykładem, bo tam jest podział na frontend i backend. Front odpowiada za transformację kodu na język pośredni i na nim są wykonywane pozostałe operacje. Dzięki temu jedno środowisko może kompilować kilka języków.
Passer93
@Gladoo: Gdzie są te "pliki asemblera"? Plik obiektowy jest generowany przez kompilator, tylko tyle i aż tyle. Nie ma żadnych "plików asemblera", to wymyśliliście wy, wykopki.
Gladoo
Gladoo
Gladoo Autor
0
@Passer93: chodzi o pliki assembly. Np. w gcc można przeciez zatrzymać proces kompilacji w tym miejscu np. gcc -S plikzrodlowy.cpp -o -plikassembly.s i podejrzeć plik.
Passer93
@Gladoo: Rozumiem, ale w normlanym workflowu te pliki nie są generowane.

Odpowiadajac na pytanie czym się różnią te pliki od plików obiektowych to .obj zawierają o wiele więcej informacji. Poza samym kodem w postaci maszynowej są też informacje dla linkera, symbole, relokacje, komentarze, moge byc tez jakieś metadane profilera czy debuggera. Ogarnij sobie https://linux.die.net/man/1/objdump jak jestes na linuxie