安藏理工大学 ANHUI UNIVERSITY OF SCIENCE TECHNOLOGY 共享库的生成方法 >动态库可以在程序运行期间释放动态库所占用的内存,腾 出空间供其他程序使用。 > 由于共享库和动态库并没有在程序中包括库函数的内容 只是包含了对库函数的引用,因此代码的规模比较小。 生成用户共享库的方法: > gcc testl.c test2.c test3.c -fPIC-shared -o libtest.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 OF SCIENCE TECHNOLOGY 静态库的生成方法 >静态库的生成方法 Step1:编译而不连接 >gcc test1.c-c -o test1.o >gcc test2.c-c -o test2.0 >gcc test3.c-c -o test3.o Step2:生成ar命令生成静态库 $ar rcs libtest.a test1.o test2.o test3.0 Step3:使用静态库编译和连接,生成可执行文件 gcc test.c -L.libtest.a -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
安藏理工大学 >系统中可用的库都存放在/usr/lib和ib目录中。库文件名 由前缀b和库名以及后缀组成。根据库的类型不同,后 缀名也不一样。 √共享库名的格式:库的名称.so.主版本号.次版本号 √静态库名的格式:库的名称.a 例如: libm.so.5 数学共享库的标识字符为m,版本号为5 libm.a 静态数字库 libc.a 为标准C库 15
15 ➢ 系统中可用的库都存放在/usr/lib和/lib目录中。库文件名 由前缀lib和库名以及后缀组成。根据库的类型不同,后 缀名也不一样。 ✓ 共享库名的格式:库的名称.so.主版本号.次版本号 ✓ 静态库名的格式:库的名称.a 例如: libm.so.5 数学共享库的标识字符为m,版本号为5 libm.a 静态数字库 libc.a 为标准C库
安藏理工大学 ANHUI UNIVERSITY OF SCIENCE TECHNOLOGY 函数库存放的标准目录: √Iib 系统必备共享库 √/usr/lib标准共享库和静态库 /usr/i486-linux-libc5/lib Iibc5兼容性函数库 √/usr/X11R6/IibX11R6的函数库 √/usr/local/lib本地函数库 16
16 函数库存放的标准目录: ✓/lib 系统必备共享库 ✓/usr/lib 标准共享库和静态库 ✓/usr/i486-linux-libc5/lib libc5兼容性函数库 ✓/usr/X11R6/libX11R6的函数库 ✓/usr/local/lib 本地函数库
安藏理工大學 ANHUI UNIVERSITY OF SCIKNCE TECHNOLOGY 头文件存放的目录: √usr/include系统头文件 √/usr八ocal/include本地头文件 共享库及相关配置文件在/etc目录中,其中: ld.so.conf 包含共享库的搜索位置 ldconfig ,共享库管理工具,一般在更新了共享库之后要 运行该命令 ldd i 可查看可执行文件所使用的共享库 e.g.dd test,查看test文件的共享库依赖 17
17 头文件存放的目录: ✓/usr/include 系统头文件 ✓/usr/local/include 本地头文件 共享库及相关配置文件在/etc目录中,其中: ld.so.conf 包含共享库的搜索位置 ldconfig 共享库管理工具,一般在更新了共享库之后要 运行该命令 ldd 可查看可执行文件所使用的共享库 e.g. #ldd test, 查看test文件的共享库依赖