博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译器背后的故事
阅读量:4173 次
发布时间:2019-05-26

本文共 1873 字,大约阅读时间需要 6 分钟。

编译器背后的故事

1.gcc生成静态库和动态库

1.创建目录文件

mkdiir test1
cd test1
用自己的熟悉编辑器编写三个文件
源程序hello.c
在这里插入图片描述

头文件hello.h

在这里插入图片描述

主程序mian.c

在这里插入图片描述2.将hello.c编译成.o文件。
在这里插入图片描述3.由.o文件创建静态库
在这里插入图片描述4.在程序中使用静态库
在这里插入图片描述5.由.o文件创建动态库文件
在这里插入图片描述6.在程序中使用动态库在这里插入图片描述
程序报错找不到libmyhello.so,此时需要将libmyhello.so添加到/usr/lib中
在这里插入图片描述一开始权限不够,可以使用sudo命令提高权限
7.删除掉后面加的文件,重新创建文件libmyhello.a和动态库文件libmyhello.so
在这里插入图片描述再来重新创建静态库文件和动态库文件
在这里插入图片描述生成目录文件hello并运行
在这里插入图片描述

2.静态库.a与.so库文件的生成与使用

1.生成四个文件A1.c A2.c A.h test.c

在这里插入图片描述

A1.c

在这里插入图片描述

A2.c在这里插入图片描述A.h

在这里插入图片描述test.c
在这里插入图片描述2.生成目标文件
在这里插入图片描述生成静态库文件
在这里插入图片描述3.共享库.so文件的生成与使用
在这里插入图片描述

3.gcc编译器背后的故事

1.创建test0文件,在其下编写一个hello.c文件

在这里插入图片描述2.将hello.c文件预处理为hello.i文件
在这里插入图片描述3.将hello.i文件编译生成汇编程序hello.s
在这里插入图片描述

hello.s程序

在这里插入图片描述4.将hello.s程序汇编为目标文件hello.o
在这里插入图片描述

4.下载安装nasm汇编编译器

1.在ubuntu中下载nasm

在这里插入图片描述2.运行hello.asm
在这里插入图片描述hello.asm
在这里插入图片描述

5.关于curse及其安装

1.curse常用函数

initscr(): initscr() 是一般 curses 程式必须先呼叫的函数, 一但这个函数被呼叫之后, 系统将根据终端机的形态并启动 curses 模式.
endwin(): curses 通常以呼叫 endwin() 来结束程式. endwin() 可用来关闭curses 模式, 或是暂时的跳离 curses 模式. 最后再以wrefresh() doupdate() 来重返 curses 模式.
cbreak() and nocbreak(): 当 cbreak 模式被开启后, 除了 DELETE 或 CTRL 等仍被视为特殊控制字元外一切输入的字元将立刻被一一读取.当处于 nocbreak 模式时, 从键盘输入的字元将被储存在 buffer 里直到输入 RETURN或 NEWLINE.
nl() and nonl(): 用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字元 ( 如 /n ). 而输出资料时, NEWLINE 字元是否被对应为 RETURN 和 LINDFEED系统预设是开启的.
echo() and noecho(): 此函式用来控制从键盘输入字元时是否将字元显示在终端机上.系统预设是开启的.
intrflush(win,bf): 呼叫 intrflush 时须传入两个值, win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr. bf 为 TRUE 或 FALSE. 当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应将较为快速.但可能会造成萤幕的错乱.
keypad(win,bf): 呼叫 keypad 时须传入两个值, win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr. bf 为 TRUE 或 FALSE. 当开启 keypad后, 可以使用键盘上的一些特殊字元, 如上下左右>等方向键, curses 会将这些特殊字元转换成
curses.h 内定义的一些特殊键. 这些定义的特殊键通常以 KEY_ 开头.
refresh(): refresh() 为 curses 最常呼叫的一个函式. curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改变萤幕上的画面时, curses 并不会立刻对萤幕做改变, 而是等到refresh() 呼叫后, 才将刚才所做的变动一次完成. 其余的资料将维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间.如果是 initscr() 后第一次呼叫 refresh(), curses 将做清除萤幕的工作.
2.curse安装
在这里插入图片描述curses函数库的头文件和库文件被分别安装在/usr/include/和/usr/lib/下

6.简单游戏开发

贪吃蛇

建立文件编译
在这里插入图片描述程序
在这里插入图片描述运行效果
在这里插入图片描述愉快的编译器探寻之旅就到此结束。

转载地址:http://flbai.baihongyu.com/

你可能感兴趣的文章
ThreadLocal的使用场景
查看>>
史上最简单的树结构 ztree
查看>>
poi导出Excel 版本一
查看>>
poi导出Excel 写入标题栏 以及 将数据库中数据进行导出 版本二
查看>>
springboot进行Junit测试
查看>>
poi 将Excel数据导入到数据库中 第三版
查看>>
java 中的反射技术
查看>>
poi 使用反射技术导出Excel表格 替换第二版
查看>>
使用easypoi 将数据库数据导出 以及将Excel表格数据导入数据库 第五版
查看>>
idea file settinngs 不出现Subversion 无法提交更新代码
查看>>
Easypoi导出数据 时间类型为时间戳 显示时间为年月日时分秒 最终版
查看>>
spingboot非controller类 junit测试类中获取request response对象
查看>>
使用Autowired注解 创建bean 爆红
查看>>
数据库增加字段并且保留原始数据
查看>>
sql刷题
查看>>
多线程学习 实现多线程的两种方式 一
查看>>
多线程学习 多线程的五种状态 二
查看>>
学习多线程 造成线程不同步的原因 数组实现简单的栈 三
查看>>
多线程学习 synchronized加锁 保持数据一致 四
查看>>
多线程学习 等待队列状态 死锁问题及其解决办法 五
查看>>