编译器背后的故事
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.cA.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.简单游戏开发
贪吃蛇
建立文件编译
程序
运行效果
愉快的编译器探寻之旅就到此结束。