gcc 编译器:

               1.gcc 编译的四个阶段:预处理,编译,汇编,链接;

               2.gcc 支持的后缀名: 

                   .C /.cc / ./cpp   C++源程序;

                   .m                    Objective-C原始程序;

                   .i                       经过预处理的C原始程序;

                   .ii                      经过预处理的C++原始程序;

                   .s  /.S                汇编语言源程序;

                   .o                      目标文件;

                   .a/.so                 编译后的库文件;

                   

               3、gcc -Wall  文件名,   编译时尽可能的提供警告;

               4、 gcc -O2  文件名,    编译时尽可能进行优化,产生尽可能小的和执行尽可能快的代码;

               5、静态库: 在编译时,直接将库函数的代码加到可执行文件中,在以后执行过程中,不在依赖该库文件;

                          命名方式:lib + 库名+.a  (如: libstd.a)

                     动态库 和动态加载库: 在编译时不用加入代码,在运行时装载和卸载;

                           命名方式:lib + 库名 + .so + .版本号 (如libc.a.so.9)


               6、创建静态库:

                        gcc -c  c文件1  c文件2(生成.o文件)

                        ar -cr 库名称 目标文件1 目标文件2(.o文件)

                   

               7、静态库的使用:

                        gcc -o 生成名称 c文件  -l库命名(如lm 表示连接的库为libm.a 或者libm.so;)  -L/路径

                        由于静态库不能先于源程序连接,所以连接库(-l库名称) 都卸载最后;

           

               8、创建共享库:

                       gcc -c -fPIC test.c

                       gcc -c -fPIC text2.c

                       gcc -shared -fPIC -o libtest.so test.o test2.o


                9、/lib : 系统必备共享函数库;

                      /usr/lib: 标准共享函数库和静态函数库;

                     /usr/local/lib: 本地函数库;

            

                10、在更新了共享库之后,要使用ldconfig命令,告知系统;

                

                11、ldd      用于查看库函数之间的依赖性;


                12、在程序中使用指针(空类型) = dlopen(“路径”,连接方式(flag))调用连接库,使用完后使用dlclose(指针)关闭该库;该函数在<dlfcn.h>头文件中;

         

                13、gcc -c 1.c 2.c 存在的意义:

                        如果要编译的文件非常多,但是在编译完成之后修改了某个文件,那么只需在将整个文件再重新编译成.o文件,然后再连接一下就可以了,这个就节省了大量的时间。