gcc的ar工具及as汇编编译器入门练习及curses库
gcc的ar工具及as匯編編譯器入門練習(xí)及curses庫
- 目標(biāo)
- 參考資料
- 一、ar工具使用
- 1.編寫三個函數(shù)main.c/sub1.c/sub2.c
- 2.將x2x、x2y目標(biāo)文件用 ar工具生成1個 .a 靜態(tài)庫文件
- 3.用 gcc將 main函數(shù)的目標(biāo)文件與此靜態(tài)庫文件進行鏈接,生成最終的可執(zhí)行程序
- 二、as匯編編譯器
- 1.首先安裝nasm
- 2.編譯hello.asm
- 三.Linux 環(huán)境下C語言編譯實現(xiàn)貪吃蛇游戲
- 1.curses庫
- 2.遠古BBS
- 3.Linux 環(huán)境下C語言編譯實現(xiàn)貪吃蛇游戲
- 總結(jié)
目標(biāo)
1.ar工具生成1個 .so 動態(tài)庫文件, 然后用 gcc將 main函數(shù)的目標(biāo)文件與此動態(tài)庫文件進行鏈接,生成最終的可執(zhí)行程序
2.對示例代碼“hello.asm”編譯生成可執(zhí)行程序,并與“hello world”C代碼的編譯生成的程序大小進行對比。
3.用gcc編譯生成一個終端游戲,體會curses庫如何被鏈接和使用。
參考資料
GCC編譯器背后的故事
靜態(tài)庫.a與.so庫文件的生成與使用
用gcc生成靜態(tài)庫和動態(tài)庫
Linux GCC常用命令
NASM 學(xué)習(xí)筆記–NASM的安裝和使用
一、ar工具使用
1.編寫三個函數(shù)main.c/sub1.c/sub2.c
sub1.c
float x2x(float a, float b) {return a * b; }sub2.c
float x2y(float a, float b) {return a / b; }main.c
#include<stdio.h> extern float x2x(float a, float b); extern float x2y(float a, float b); int main() {float a = 2;float b = 3;printf("ax2xb=%f\n",x2x(a,b));printf("ax2yb=%f\n",x2y(a,b)); }2.將x2x、x2y目標(biāo)文件用 ar工具生成1個 .a 靜態(tài)庫文件
ein@ein-virtual-machine:~/ein$ gcc -c sub1.c ein@ein-virtual-machine:~/ein$ gcc -c sub2.c ein@ein-virtual-machine:~/ein$ ar -crv main.a sub1.o sub2.o
成功生成
3.用 gcc將 main函數(shù)的目標(biāo)文件與此靜態(tài)庫文件進行鏈接,生成最終的可執(zhí)行程序
in@ein-virtual-machine:~/ein$ gcc -c main.c ein@ein-virtual-machine:~/ein$ gcc -o main main.o main.a ein@ein-virtual-machine:~/ein$ ./main ax2xb=6.000000 ax2yb=0.666667
成功生成
二、as匯編編譯器
1.首先安裝nasm
sudo apt install nasm2.編譯hello.asm
; hello.asm section .data ; 數(shù)據(jù)段聲明msg db "Hello, world!", 0xA ; 要輸出的字符串len equ $ - msg ; 字串長度 section .text ; 代碼段聲明 global _start ; 指定入口函數(shù) _start: ; 在屏幕上顯示一個字符串mov edx, len ; 參數(shù)三:字符串長度mov ecx, msg ; 參數(shù)二:要顯示的字符串mov ebx, 1 ; 參數(shù)一:文件描述符(stdout) mov eax, 4 ; 系統(tǒng)調(diào)用號(sys_write) int 0x80 ; 調(diào)用內(nèi)核功能; 退出程序mov ebx, 0 ; 參數(shù)一:退出代碼mov eax, 1 ; 系統(tǒng)調(diào)用號(sys_exit) int 0x80 ; 調(diào)用內(nèi)核功能 nasm -f elf64 -o hello.o hello.asm ld -o hello hello.o ./hello
在此之后又編譯了一個相同輸出hello world的C程序hello1.c
不難看出,在輸出相同的程序下,匯編語言寫的程序編譯生成的程序要小巧太多
三.Linux 環(huán)境下C語言編譯實現(xiàn)貪吃蛇游戲
1.curses庫
curses庫的主要函數(shù)及功能參考
Linux下curses函數(shù)庫
通過搜索發(fā)現(xiàn)curses.h文件在usr/include這個文件夾里面
2.遠古BBS
打開控制面板
啟用 “telnet client” 和"適用于Linux的Windows子系統(tǒng)"
打開一個cmd命令行窗口,命令行輸入 telnet bbs.newsmth.net,以游客身份體驗一下即將絕跡的遠古時代的 BBS
3.Linux 環(huán)境下C語言編譯實現(xiàn)貪吃蛇游戲
參考資料: Linux
環(huán)境下C語言編譯實現(xiàn)貪吃蛇游戲
總結(jié)
學(xué)到了不少GCC相關(guān)的知識,加強了對GCC編譯的熟練度
總結(jié)
以上是生活随笔為你收集整理的gcc的ar工具及as汇编编译器入门练习及curses库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作文经典好词好句好段摘抄大全
- 下一篇: 怎样用蚯蚓钓鲤鱼的技巧介绍