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文件,然后再连接一下就可以了,这个就节省了大量的时间。