-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathcompilation.tex
More file actions
34 lines (25 loc) 路 5.15 KB
/
Copy pathcompilation.tex
File metadata and controls
34 lines (25 loc) 路 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
\section{袩褉芯褑械褋褋 泻芯屑锌懈谢褟褑懈懈 锌褉芯谐褉邪屑屑}
袨褔械薪褜 薪械斜芯谢褜褕芯械 褔懈褋谢芯 锌褉芯谐褉邪屑屑 薪邪锌懈褋邪薪褘 胁 芯写薪芯屑 褎邪泄谢械. 袠褋褏芯写薪褘泄 泻芯写 斜芯谢褜褕懈薪褋褌胁邪 锌褉芯谐褉邪屑屑 褉邪蟹斜懈褌 薪邪 屑薪芯卸械褋褌胁芯 褎邪泄谢芯胁. 袧邪锌褉懈屑械褉 褟写褉芯 Linux 胁械褉褋懈懈 3.2 褋芯写械褉卸懈褌 37626 褎邪泄谢芯胁.
袩褉芯谐褉邪屑屑褘 薪邪 C++ 褋芯褋褌芯褟褌 懈蟹 褎邪泄谢芯胁 写胁褍褏 胁懈写芯胁, 芯写薪懈 褎邪泄谢褘 懈屑械褞褌 褉邪褋褕懈褉械薪懈械 .h, 写褉褍谐懈械 --- .cpp. 肖邪泄谢褘 懈屑械褞褖懈械 褉邪褋褕懈褉械薪懈械 .h 薪邪蟹褘胁邪褞褌褋褟 褏械写械褉邪屑懈 (邪薪谐谢. header). 袛谢褟 锌芯谢褍褔械薪懈褟 懈褋锌芯谢薪褟械屑芯谐芯 褎邪泄谢邪 懈蟹 懈褋褏芯写薪芯谐芯 泻芯写邪 胁褘锌芯谢薪褟械褌褋褟 锌褉芯褑械褋褋, 薪邪蟹褘胁邪械屑褘泄 泻芯屑锌懈谢褟褑懈褟, 褋芯褋褌芯褟褖懈泄 懈蟹 褋谢械写褍褞褖懈褏 褋褌邪写懈泄:
\begin{enumerate}
\item 袩褉械锌褉芯褑械褋褋懈褉芯胁邪薪懈械 --- 锌褉懈屑械薪褟械褌褋褟 泻 泻邪卸写芯屑褍 .cpp 褎邪泄谢褍. 袙 褋谢褍褔邪褟褏, 泻芯谐写邪 褉械蟹褍谢褜褌邪褌 褝褌芯泄 芯锌械褉邪褑懈懈 褋芯褏褉邪薪褟褞褌 薪邪 写懈褋泻, 褎邪泄谢褍 写邪褞褌 褉邪褋褕懈褉械薪懈械 .i.
\item 孝褉邪薪褋谢褟褑懈褟 --- 锌褉懈屑械薪褟械褌褋褟 泻 褉械蟹褍谢褜褌邪褌褍 锌褉械锌褉芯褑械褋褋懈褉芯胁邪薪懈褟, 褉械蟹褍谢褜褌邪褌芯屑 褝褌芯泄 芯锌械褉邪褑懈懈 褟胁谢褟械褌褋褟 泻芯写 薪邪 邪褋褋械屑斜谢械褉械. 肖邪泄谢褘 褌邪泻芯谐芯 褌懈锌邪 懈屑械褞褌 褉邪褋褕懈褉械薪懈械 .s.
\item 袗褋褋械屑斜谢懈褉芯胁邪薪懈械 --- 锌械褉械胁芯写懈褌 泻芯写 薪邪 邪褋褋械屑斜谢械褉械 胁 屑邪褕懈薪薪褘泄 泻芯写, 褌邪泻懈械 褎邪泄谢褘 懈屑械褞褌 褉邪褋褕懈褉械薪懈械 .o 懈 薪邪蟹褘胁邪褞褌褋褟 芯斜褗械泻褌薪褘屑懈 褎邪泄谢邪屑懈.
\item 袥懈薪泻芯胁泻邪 --- 锌褉芯褑械褋褋 锌芯谢褍褔邪褞褖懈泄 薪邪 胁褏芯写 屑薪芯卸械褋褌胁芯 芯斜褗械泻褌薪褘褏 褎邪泄谢芯胁 懈 胁褘写邪褞褖懈泄 薪邪 胁褘褏芯写械 械写懈薪褘泄 懈褋锌芯谢薪褟械屑褘泄 褎邪泄谢.
\end{enumerate}
袙 锌械褉胁褘褏 泻芯屑锌懈谢褟褌芯褉邪褏 胁褋械 褝褌懈 褋褌邪写懈懈 胁褘锌芯谢薪褟谢懈褋褜 芯褌写械谢褜薪褘屑懈 锌褉芯谐褉邪屑屑邪屑懈, 邪 褉械蟹褍谢褜褌邪褌 褉邪斜芯褌褘 褝褌懈褏 褋褌邪写懈泄 胁褘锌懈褋褘胁邪谢褋褟 胁 褟胁薪芯屑 胁懈写械. 小械泄褔邪褋, 胁 褋懈谢褍 褉邪蟹薪褘褏 褋芯芯斜褉邪卸械薪懈泄, 薪械泻芯褌芯褉褘械 褋褌邪写懈懈 胁褘锌芯谢薪褟褞褌褋褟 胁屑械褋褌械, 斜械蟹 褟胁薪芯谐芯 胁褘锌懈褋褘胁邪薪懈褟 锌褉芯屑械卸褍褌芯褔薪芯谐芯 褉械蟹褍谢褜褌邪褌邪. 袧邪锌褉懈屑械褉, 胁 锌芯写邪胁谢褟褞褖械屑 斜芯谢褜褕懈薪褋褌胁械 泻芯屑锌懈谢褟褌芯褉芯胁 锌褉械锌褉芯褑械褋褋懈褉芯胁邪薪懈械 懈 褌褉邪薪褋谢褟褑懈褟 写械谢邪褞褌褋褟 胁屑械褋褌械, 斜械蟹 褟胁薪芯谐芯 胁褘锌懈褋褘胁邪薪懈褟 褉械蟹褍谢褜褌邪褌邪 锌褉械锌褉芯褑械褋褋懈褉芯胁邪薪懈褟 薪邪 写懈褋泻. 协褌芯 褋胁褟蟹邪薪芯 褋 褌械屑, 褔褌芯 泻邪泻 锌褉邪胁懈谢芯 褉械蟹褍谢褜褌邪褌 锌褉械锌褉芯褑械褋褋懈褉芯胁邪薪懈褟 斜芯谢褜褕芯泄 懈 械谐芯 褋械褉懈邪谢懈蟹懈褟/写械褋械褉懈邪谢懈蟹邪褑懈褟 褋芯蟹写邪械褌 谢懈褕薪懈械 薪邪泻谢邪写薪褘械 褉邪褋褏芯写褘 蟹邪屑械写谢褟褞褖懈械 泻芯屑锌懈谢褟褑懈褞. 袣芯屑锌懈谢褟褌芯褉 clang 褍屑械械褌 褉邪斜芯褌邪褌褜 胁 褉械卸懈屑械 integrated-as (胁褋褌褉芯械薪薪褘褏 邪褋褋械屑斜谢械褉), 泻芯谐写邪 褉械蟹褍谢褜褌邪褌 褌褉邪薪褋谢褟褑懈懈 薪械 胁褘锌懈褋褘胁邪械褌褋褟 胁 胁懈写械 邪褋褋械屑斜谢械褉薪芯谐芯 褌械泻褋褌邪, 邪 褋褉邪蟹褍 锌褉械芯斜褉邪蟹褍械褌褋褟 胁 屑邪褕懈薪薪褘泄 泻芯写. 协褌芯 锌芯蟹胁芯谢懈谢芯 褍胁械谢懈褔懈褌褜 褋泻芯褉芯褋褌褜 泻芯屑锌懈谢褟褑懈懈 懈 褍谢褍褔褕懈褌褜 褋芯芯斜褖械薪懈褟 芯斜 芯褕懈斜泻邪褏 锌褉懈 懈褋锌芯谢褜蟹芯胁邪薪懈懈 asm-胁褋褌邪胁芯泻.
袛谢褟 泻芯屑锌懈谢褟褑懈懈 锌褉芯谐褉邪屑屑, 懈褋锌芯谢褜蟹褍械褌褋褟 泻芯屑邪薪写邪 {\bf g++}. 袧邪 褋邪屑芯屑 写械谢械, 锌褉芯谐褉邪屑屑邪 {\bf g++} 薪械 写械谢邪械褌 薪懈褔械谐芯 褋邪屑邪, 芯薪邪 胁褋械谐芯 谢懈褕褜 胁褘蟹褘胁邪械褌 写褉褍谐懈械 锌褉芯谐褉邪屑屑褘 胁 锌褉邪胁懈谢褜薪芯屑 锌芯褉褟写泻械. 袧邪锌褉懈屑械褉, 锌褉懈 胁褘蟹芯胁械 {\bf g++ helloworld.cpp} 胁褘锌芯谢薪褟褞褌褋褟 褋谢械写褍褞褖懈械 泻芯屑邪薪写褘:
\begin{minted}[linenos, frame=lines, framesep=2mm, tabsize = 4, breaklines]{sh}
# 锌褉械锌褉芯褑械褋褋懈褉芯胁邪薪懈械 懈 褌褉邪薪褋谢褟褑懈褟
cc1plus -quiet -D_GNU_SOURCE helloworld.cpp -quiet -dumpbase helloworld.cpp -mtune=generic -march=x86-64 -auxbase helloworld -version -o /tmp/ccSpnAlT.s
# 邪褋褋械屑斜谢懈褉芯胁邪薪懈械
as --64 -o /tmp/ccW7yOj1.o /tmp/ccSpnAlT.s
# 谢懈薪泻芯胁泻邪
ld --eh-frame-hdr -m elf_x86_64 /lib/crt1.o /lib/crti.o /lib/crtbegin.o -L/lib -dynamic-linker /lib/ld-linux-x86-64.so.2 /tmp/ccW7yOj1.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /lib/crtend.o /lib/crtn.o
\end{minted}
袣芯屑邪薪写邪 {\bf g++}, 胁褘蟹褘胁邪褞褖邪褟 写褉褍谐懈械 泻芯屑邪薪写褘, 薪邪蟹褘胁邪械褌褋褟 写褉邪泄胁械褉芯屑. 袣邪泻 胁懈写薪芯 胁薪褍褌褉械薪薪懈械 泻芯屑邪薪写褘 锌芯谢褍褔邪褞褌 写芯褋褌邪褌芯褔薪芯 屑薪芯谐芯 芯锌褑懈泄, 褔褌芯斜褘 懈褏 胁褘蟹褘胁邪褌褜 薪邪锌褉褟屑褍褞. 袣 褋褔邪褋褌褜褞, 写褉邪泄胁械褉 锌芯蟹胁芯谢褟械褌 胁褘锌芯谢薪懈褌褜 泻邪卸写褍褞 褋褌邪写懈褞 泻芯屑锌懈谢褟褑懈懈 芯褌写械谢褜薪芯:
\begin{minted}[linenos, frame=lines, framesep=2mm, tabsize = 4, breaklines]{sh}
g++ -S -o helloworld.s helloworld.cpp # 胁褘蟹褘胁邪械褌 cc1plus
g++ -c -o helloworld.o helloworld.s # 胁褘蟹褘胁邪械褌 as
g++ helloworld.o # 胁褘蟹褘胁邪械褌 ld
\end{minted}