linux环境下的编译器gcc
gcc:
-o 编译链接生成可执行文件
-O -O1 -O2 -O3 编译优化
-g -g1 -g2 -g3 产生调试信息至可执行文件
-w 关闭所有的警告
-W all,error -Wall显示所有的警告 -Werror把所有的警告当错误
-c 编译生成目标文件 不链接
-E 预编译
-S 编译成汇编
-D 在命令行中添加宏定义
-x 指定语言的编译类型 gcc -x c xxxx.c gcc -x assembler xxx.s
-std=c89 -std=c99指定语言的编译标准
注意:gcc编译器自动调用链接器ld
restrict关键字 int add( int* restrict a){}优化编译器的编译,函数参数中的指针指向的值放在寄存器中,提高效率,在c99中支持,c89不支持
接下来讲很好玩的静态库的编译
通常我们需要调用很多库编译,简单例子
写一个 add.c 存 int add(int a,int b){return a+b;}
写一个sub.c 同理存减法函数
写一个main.c 调用add,sub
编译 gcc main.c add.c sub.c ====> a.out
当我们的文件写的很多时,就显得很不便,就有了静态库的生成
第一步:编译成目标文件
gcc -c -static add.c ====》 目标文件add.o
gcc -c -static sub.c=====> 目标文件sub.o
第二步:归档成静态库
ar工具来了
-r ar -r ku.a add.o sub.o ===》把目标文件归档成静态库ku.a
-t ar -t ku.a 显示你的静态库含有哪些目标文件
nm工具(查看函数符号的功能)
nm 目标文件/可执行文件/静态库/动态库
小应用:***** 使用gcc静态库,输入一个菱形半径,打印菱形
1.写一个半径输入库封装IOinput库
2.写一个菱形的打印库封装graphics库
计划: 1.实现输入 2.实现菱形 3.编译成静态库 4.调用静态库
很好玩的~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~