静态库:
书写格式:lib+库名.a
生成静态库文件代码:ar crv libfoo.a add.o max.o
c是创建库,r是将方法添加到库中,v是显示过程
库后面是链接的.o文件
共享库:
生成共享库文件代码:gcc -shared -fPIC -o libfoo.so add.o max.o
库的使用(静态库和共享库通用):gcc -o main main.c -L. -lfoo
根据库libfoo.a生成可执行文件main
-L指定库的存储路径
-l指定库的名称
如果在库的存储路径 有同名的共享库和静态库,gcc 默认使用共享库
共享库的使用方法:
1.因为系统默认只会去存储库的标准位置(/lib 或/usr/lib 等)加载,而不会在当前位置寻找。所以使用管理员权限将库拷贝到 /usr/lib 下,再执行程序,就可以成功。
2.如果库不在标准位置下,也可以通过设置环境变量”LD_LIBRARY_PATH”来指定加 载库的路径。
export命令是将定义的变量设置成环境变量,但是环境变量只在当前终端中有效
echo命令查看环境变量的路径
通过 ldd 命令查看可执行程序使用了哪些共享库
静态库和共享库的区别
静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做 标记,在运行程序时,才动态加载。
即使把静态库删除,main程序也可以运行,因为main已经和静态库链接在一起,并不需要静态库文件,但是缺点是如果静态库发生改变,需要将原main程序删除,再重新编译才能使用
头文件存放在/usr/include
库文件存放在/lib
环境变量
int main( int argc, char* argv[], char* envp[])
(1) argc 参数个数
(2) argv 参数内容
(3) envp 环境变量