⑧安薇理工大学 ANHUI UNIVERSITY OFSCIENCE TECHNOLOG 所有的程序都将使用标准的C函数库libc,该库中包含了内存管理或 输入输出操作的基本函数,这些库都存放在/usr/ib或/ib这些系统 公用的目录中,系统中的任何用户都可以利用这些库。 注:用户可以自己定义自己的函数库! 库可以有三种使用的我式: √静态库(a):代码在编译时就已连接到开发人员开发的应用程序 中。静态库在程序编译时会被连接到目标代码中,程序运行时将 不再需要该静态库 √共享库 hared object以*5o作为后缀):只是在程序开始远行 时才载入,在编译时,只是简单地指定需要使用的库函数。 √动态库:是共享库的另一种变化形式,也是在程序运行时载入, 使用的库函数不是在程序运行开始,而是在程序中的语句需要使 用该函数时才载入。类似于 windows os中的DL文件。 12
12 ➢ 所有的程序都将使用标准的C函数库libc,该库中包含了内存管理或 输入输出操作的基本函数,这些库都存放在/usr/lib或/lib这些系统 公用的目录中,系统中的任何用户都可以利用这些库。 注:用户可以自己定义自己的函数库! ➢ 库可以有三种使用的形式: ✓ 静态库(*.a):代码在编译时就已连接到开发人员开发的应用程序 中。静态库在程序编译时会被连接到目标代码中,程序运行时将 不再需要该静态库 ✓ 共享库(shared object,以*.so作为后缀):只是在程序开始运行 时才载入,在编译时,只是简单地指定需要使用的库函数。 ✓ 动态库:是共享库的另一种变化形式,也是在程序运行时载入, 使用的库函数不是在程序运行开始,而是在程序中的语句需要使 用该函数时才载入。类似于windows OS中的DLL文件
⑧安薇理工大学 ANHUI UNIVERSITY OFSCIENCE TECHNOLOG 共享库的生成方法 动态库可以在程序运行期间释放动态库所占用的内存,腾 出空间供其他程序使用。 >由于共享库和动态库并没有在程序中包括库函数的内容, 只是包含了对库函数的引用,因此代码的规模比较小。 生成用户共享库的方法: gcc testl. c test2. c test3. c-fPIC-shared-o latest. so 使用自定义的库进行编译、连接 gcc test c-L. libtest so -o test 13
13 共享库的生成方法 ➢ 动态库可以在程序运行期间释放动态库所占用的内存,腾 出空间供其他程序使用。 ➢ 由于共享库和动态库并没有在程序中包括库函数的内容, 只是包含了对库函数的引用,因此代码的规模比较小。 生成用户共享库的方法: ➢ gcc test1.c test2.c test3.c -fPIC -shared -o libtest.so 使用自定义的库进行编译、连接 ➢ gcc test.c -L. libtest.so -o test
⑧安薇理工大学 ANHUI UNIVERSITY OFSCIENCE TECHNOLOG 静态库的生成方法 >静态库的生成方法 5tep:编译而不连接 s gcc test1.c-c-o test1.o s gcc test2.c-c-o test2.0 > gcc test3 c-c-o test3o step2:生成ar命令生成静态库 Sar rcs libtest a test1. o test2. o test3o step3:使用静态库编译和连接,生成可执行文件 gcc testc-L. libtesta-o test 14
14 静态库的生成方法 ➢ 静态库的生成方法: Step1: 编译而不连接 ➢ $ gcc test1.c -c -o test1.o ➢ $ gcc test2.c -c -o test2.o ➢ $ gcc test3.c -c -o test3.o Step2: 生成ar命令生成静态库 $ar rcs libtest.a test1.o test2.o test3.o Step3: 使用静态库编译和连接,生成可执行文件 ➢ gcc test.c -L. libtest.a -o test
⑧安薇理工大学 ANHUI UNIVERSITY OFSCIENCE TECHNOLOG >系统中可用的库都存放在 usr/lib和/b目录中。库文件名 由前缀lib和库名以及后缀组成。根据库的类型不同,后 缀名也不一样。 √共享库名的格式:库的名称so主版本号次版本号 静态库名的格式:库的名称a 例如 ibm.so5数学共享库的标识字符为m,版本号为5 ibm. a 静态数字库 libc. a 为标准C库 15
15 ➢ 系统中可用的库都存放在/usr/lib和/lib目录中。库文件名 由前缀lib和库名以及后缀组成。根据库的类型不同,后 缀名也不一样。 ✓ 共享库名的格式:库的名称.so.主版本号.次版本号 ✓ 静态库名的格式:库的名称.a 例如: libm.so.5 数学共享库的标识字符为m,版本号为5 libm.a 静态数字库 libc.a 为标准C库
⑧安薇理工大学 ANHUI UNIVERSITY OFSCIENCE TECHNOLOG 函数库存放的标准目录: √ib系统必备共享库 √/usr/ib标准共享库和静态库 /usri486-inux-ibc5/ ib libc5兼容性函数库 √usr/X11R6ibX11R6的函数库 √/usr/ ocal/lib本地函数库 16
16 函数库存放的标准目录: ✓/lib 系统必备共享库 ✓/usr/lib 标准共享库和静态库 ✓/usr/i486-linux-libc5/lib libc5兼容性函数库 ✓/usr/X11R6/libX11R6的函数库 ✓/usr/local/lib 本地函数库