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


目标

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编译的熟练度

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值