Linux环境编程编译工具与动态态库

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.调用静态库

很好玩的~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。