Linux C :Linux 下第一个C程序
? ? ? ?我首先用QQ管家下載VMware Workstation中的虛擬機,然后下載Ubuntu64的映像,開啟了Linux之路。
? ? ? ?搞了些設置后,成功啟動Linux ,添加自身Window 和 虛擬機上Linux的共享目錄方便傳文件。再添加些軟鏈接(快捷方式)來方便訪問文件夾。
? ? ? 一般剛開始用VIM 編輯本文,操作起來比較不方便。所以一般現在Window上編輯好,然后將文本復制到Linux中。
? ? ? 首先創建? .c的文件在此下編輯 ,我的時helloworld.c
?
之后? 執行 gcc helloworld.c? ?后編譯成 a.out 的二進制文件
如果沒下載gcc? 可執行? ??sudo apt install gcc? ?即可
執行二進制文件并 傳入輸入參數
?
?
當編譯多個文件時?gcc? 文件1? 文件2? ?文件3? ?.......
gcc的編譯過程分為三步:
第一步將? 文件1.c? 文件2.c? ?文件3.c 分別通過編譯器解析成匯編語言?? 文件1.s? 文件2.s? ?文件3.s? ? ???蓤绦忻? ?gcc? -S? 文件1.s? 文件2.s? ?文件3.s? ? 只激活預處理,和編譯
第二步將?? 文件1.s? 文件2.s? ?文件3.s 分別通過匯編器? 文件1.o? 文件2.o? ?文件3.o? ? ? ??蓤绦忻? ?gcc? -c? 文件1.s? 文件2.s? ?文件3.s? ? 只激活預處理,和編譯和匯編,生成obj目標代碼文件
第三步將這些文件通過鏈接器生成 out 的可執行文件 如果不想編譯出來成? a.out 名字? ? 可執行命令? ?gcc -o? 新文件名? ?待編譯文件名? ? 如 gcc -o hello.exe helloworld.c
gcc 的相關命令 參考菜鳥教程??https://www.runoob.com/w3cnote/gcc-parameter-detail.html
?
?
bss段(Block Started by Symbolsegment)通常是指用來存放程序中未初始化的全局變量和未初始化的靜態局部變量的一塊內存區域,
匯編代碼轉成目標代碼文件.o包含6部分:
1)文件頭:包含代碼段,數據段和BSS段的大小
2)代碼段: 包含機器指令
3) 數據段:包含了初始化全局變量和初始化靜態數據
4) bss 段:存放程序中未初始化的全局變量
5) 指針以及數據和bss 中的偏移量和重定位信息
6) 符號表 : 包含非靜態全局變量、函數名稱及其屬性
?
合成a.out 的文件過程中將文件頭的數據大小,代碼段,bss段,數據段 通過符號表中的引用信息來進行合并。
生成出來的a.out 文件包含四部分內容:
1) 文件頭 : 包含了文件的加載信息和大小,其中
? ? 1.1) tsize = 代碼段大小
? ? 1.2) dsize = 包含了初始化全局變量和初始化靜態局部變量的數據段大小。
? ? 1.3) bsize? =包含了未初始化的全局變量和未初始化的靜態局部變量的bss段大小。
? ? ?1.4) total_size =加載? a.out文件的總大小
2)代碼段:包含了可執行代碼
3)數據段:?包含了初始化全局變量和初始化靜態數據
4)符號表: 可選,用于調式。
要注意的是bss中的數據和自動局部變量并沒用存放在 a.out中。通常來講? ?bsize? ?=total_size? - tsize - dsize? ?。bss段用于程序執行期間的動態內存分配,bss上的多余空閑內存稱為堆區。
?
總結
以上是生活随笔為你收集整理的Linux C :Linux 下第一个C程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统原理:操作系统的启动 中断/
- 下一篇: Linux C :C的汇编码生成