一、make
Linux上的工程管理工具,可以实现自动化编译;
1)安装make:
2)make的使用:
以此为例:
|
//多文件的编译
gcc -o main main.c add.c max.c
gcc -c main.c
gcc -c add.c
gcc -c max.c
makefile的编写:
all:main
main:add.o max.o main.o
gcc -o main add.o max.o main.o
add.o:add.c
gcc -c add.c
max.o:max.c
gcc -c max.c
main.o:main.c
gcc -c main.c
clean:
rm -rf *.o main
注意:
写makefile(可以改名字,但不建议,可能可以运行)的时候要定格写,以及tab键,可以不空行
注意写makefile文件的时候,顶格写,tab键(不是空格);
vim makefile
make
./main
自己练习:多次make看结果,修改一个文件make看结果,make clean
clean的使用:
二、库文件
库–是一组预先编译好的方法的集合;
Linux系统存储库的位置一般在:/lib 和 /usr/lib;在64位系统上有些库也可能被存储在/usr/lib64下;
库的头文件一般会被存储在/usr/include下或者其子目录下;
库的分类:静态库和共享库
1、静态库
命名规则:libxxx.a
1)生成静态库及使用
(1)先将所要生成库文件的.c文件编译成.o文件;
(2)创建静态库(使用命令ar)
ar crv libxxx.a xxx.o xxx.o
c:创建库
r:将方法添加到库中
v:显示过程
(3)使用静态库
gcc -o main main.c -L. -lxxx //(main为文件名示例)
-L:指定库的存储位置;
-l:指定库的名称(不需要lib和扩展名.a)
示例:
2)静态库缺点
当你同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一函数的多个副本。
而且在程序文件自身中也有多份同样的副本,这将消耗大量宝贵的内存和磁盘空间;
2、共享库
命名规则:libxxx.so
1)静态库生成及使用
1)先将所有要生成库文件的.c文件编译成.o文件;
2)打包生成共享库(gcc)
gcc -share -fpic -o libxxx.so xxx.o xx.o
3)共享库的使用
gcc -o main main.c -L路径 -l库名 (其中main为文件名)
注意:共享库一定要放到标准路径下:
sudo mv libxxx.so /usr/lib
补充了一个命令:查看使用了哪些共享库 ldd
ldd main
静态库和共享库的区别
静态库:方法包含到库里面,体积大;
共享库:方法没有包含进去,只是做了一个标记,体积小;
共享库如果10个应用程序共享,那么磁盘上只有一份共享的库文件,而且运行加载时在内存中只加载了标记了的这一份库文件;
而静态库,就是这10个应用程序都包含了这个库文件,那么10份的库文件都放在磁盘上了(占用磁盘空间),而且运行加载的时候占用内存空间(10份库文件都要加载);
共享库便于升级;