共享库和静态库(重点)
库文件 就是 .o文件的 集合,多个.o文件可以合成为一个 库文件。Unix/Linux提供了两种打包方式: 静态库和共享库
静态库以 .a 为后缀名,共享库以 .so 为后缀名。
区别:
静态库 是代码的复制过程,共享库 只是留下了函数的地址。
连接静态库,可执行文件会比较大,修改后需要重新连接,不利于 更新和维护。好处就是独立,可执行文件在运行时,不需要再次访问静态库。
使用共享库,可执行文件比较小,修改后不一定重新连接,便于更新和维护。缺点不是独立的,可执行文件在运行时,需要多次访问共享库。
一般开发中,使用共享库。
静态库和共享库的生成和调用
静态库的生成步骤:
1 写源代码,保存退出。
2 编译源代码,生成 .o文件。 gcc -c
3 打包 生成 静态库文件
ar -r lib名字.a add.o (所有.o文件)
静态库文件名组成方式: lib开头, .a做后缀,中间放不同的名字即可。(命名规范)
静态库的调用步骤:
1 写调用的源程序(test.c)
2 编译 调用的源程序
3 连接 调用和静态库
三种方式:
a) gcc test.o libxx.a (就是直接把文件名放一起)
b) 先配置环境变量LIBRARY_PATH,把库文件所在路径配好。然后用:gcc test.o -l xx (lib和.a 省略)
c) 直接连用:gcc test.o -l xx -L 库文件所在路径
注:开发 提供 给别人 头文件+库文件即可。
共享库的生成步骤:
1 写源程序
2 编译源程序,生成.o文件。gcc -c -fpic add.c
(-fpic不写貌似也行)
3 生成 共享库文件。
gcc -shared add.o -o libmyku.so
共享库的命名规范与静态库一样,但后缀名改为 .so
共享的使用步骤:
与静态库完全一样。
注:共享库的执行需要配 环境变量 LD_LIBARAY_PATH,否则a.out运行不起来。
export LD_LIBARAY_PATH=.
库文件 就是 .o文件的 集合,多个.o文件可以合成为一个 库文件。Unix/Linux提供了两种打包方式: 静态库和共享库
静态库以 .a 为后缀名,共享库以 .so 为后缀名。
区别:
静态库 是代码的复制过程,共享库 只是留下了函数的地址。
连接静态库,可执行文件会比较大,修改后需要重新连接,不利于 更新和维护。好处就是独立,可执行文件在运行时,不需要再次访问静态库。
使用共享库,可执行文件比较小,修改后不一定重新连接,便于更新和维护。缺点不是独立的,可执行文件在运行时,需要多次访问共享库。
一般开发中,使用共享库。
静态库和共享库的生成和调用
静态库的生成步骤:
1 写源代码,保存退出。
2 编译源代码,生成 .o文件。 gcc -c
3 打包 生成 静态库文件
ar -r lib名字.a add.o (所有.o文件)
静态库文件名组成方式: lib开头, .a做后缀,中间放不同的名字即可。(命名规范)
静态库的调用步骤:
1 写调用的源程序(test.c)
2 编译 调用的源程序
3 连接 调用和静态库
三种方式:
a) gcc test.o libxx.a (就是直接把文件名放一起)
b) 先配置环境变量LIBRARY_PATH,把库文件所在路径配好。然后用:gcc test.o -l xx (lib和.a 省略)
c) 直接连用:gcc test.o -l xx -L 库文件所在路径
注:开发 提供 给别人 头文件+库文件即可。
共享库的生成步骤:
1 写源程序
2 编译源程序,生成.o文件。gcc -c -fpic add.c
(-fpic不写貌似也行)
3 生成 共享库文件。
gcc -shared add.o -o libmyku.so
共享库的命名规范与静态库一样,但后缀名改为 .so
共享的使用步骤:
与静态库完全一样。
注:共享库的执行需要配 环境变量 LD_LIBARAY_PATH,否则a.out运行不起来。
export LD_LIBARAY_PATH=.