日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gcc的ar工具及as汇编编译器入门练习及curses库

發布時間:2024/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc的ar工具及as汇编编译器入门练习及curses库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gcc的ar工具及as匯編編譯器入門練習及curses庫

  • 目標
  • 參考資料
  • 一、ar工具使用
    • 1.編寫三個函數main.c/sub1.c/sub2.c
    • 2.將x2x、x2y目標文件用 ar工具生成1個 .a 靜態庫文件
    • 3.用 gcc將 main函數的目標文件與此靜態庫文件進行鏈接,生成最終的可執行程序
  • 二、as匯編編譯器
    • 1.首先安裝nasm
    • 2.編譯hello.asm
  • 三.Linux 環境下C語言編譯實現貪吃蛇游戲
    • 1.curses庫
    • 2.遠古BBS
    • 3.Linux 環境下C語言編譯實現貪吃蛇游戲
  • 總結


目標

1.ar工具生成1個 .so 動態庫文件, 然后用 gcc將 main函數的目標文件與此動態庫文件進行鏈接,生成最終的可執行程序
2.對示例代碼“hello.asm”編譯生成可執行程序,并與“hello world”C代碼的編譯生成的程序大小進行對比。
3.用gcc編譯生成一個終端游戲,體會curses庫如何被鏈接和使用。


參考資料

GCC編譯器背后的故事
靜態庫.a與.so庫文件的生成與使用
用gcc生成靜態庫和動態庫
Linux GCC常用命令
NASM 學習筆記–NASM的安裝和使用


一、ar工具使用

1.編寫三個函數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目標文件用 ar工具生成1個 .a 靜態庫文件

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函數的目標文件與此靜態庫文件進行鏈接,生成最終的可執行程序

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 nasm

2.編譯hello.asm

; hello.asm section .data ; 數據段聲明msg db "Hello, world!", 0xA ; 要輸出的字符串len equ $ - msg ; 字串長度 section .text ; 代碼段聲明 global _start ; 指定入口函數 _start: ; 在屏幕上顯示一個字符串mov edx, len ; 參數三:字符串長度mov ecx, msg ; 參數二:要顯示的字符串mov ebx, 1 ; 參數一:文件描述符(stdout) mov eax, 4 ; 系統調用號(sys_write) int 0x80 ; 調用內核功能; 退出程序mov ebx, 0 ; 參數一:退出代碼mov eax, 1 ; 系統調用號(sys_exit) int 0x80 ; 調用內核功能 nasm -f elf64 -o hello.o hello.asm ld -o hello hello.o ./hello


在此之后又編譯了一個相同輸出hello world的C程序hello1.c


不難看出,在輸出相同的程序下,匯編語言寫的程序編譯生成的程序要小巧太多

三.Linux 環境下C語言編譯實現貪吃蛇游戲

1.curses庫

curses庫的主要函數及功能參考
Linux下curses函數庫

通過搜索發現curses.h文件在usr/include這個文件夾里面

2.遠古BBS

打開控制面板
啟用 “telnet client” 和"適用于Linux的Windows子系統"

打開一個cmd命令行窗口,命令行輸入 telnet bbs.newsmth.net,以游客身份體驗一下即將絕跡的遠古時代的 BBS

3.Linux 環境下C語言編譯實現貪吃蛇游戲

參考資料: Linux
環境下C語言編譯實現貪吃蛇游戲


總結

學到了不少GCC相關的知識,加強了對GCC編譯的熟練度

總結

以上是生活随笔為你收集整理的gcc的ar工具及as汇编编译器入门练习及curses库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。