Linux静态库,动态库,共享库
当我们在Linux下创建自己的程序函数库时,经常使用的工具是GUN,当我们需要某些功能时,我们可以通过这些编译好的封装的函数库进行使用,这样可以让程序更加简洁,模块化,且容易编
1、介绍 当我们在Linux下创建自己的程序函数库时,经常使用的工具是GUN,当我们需要某些功能时,我们可以通过这些编译好的封装的函数库进行使用,这样可以让程序更加简洁,模块化,且容易编译。 静态函数库:程序执行前(编译)就加入到目标程序中 优点:1.(运行快)静态库被打包到应用程序中加载速度快 2.发布程序无需提供静态库,因为已经在app中,移植方便 缺点:1.(数据大)链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 2.更新、部署、发布麻烦 动态函数库和共享库是一样的,(在Linux上叫共享对象库,文件后缀是.so,window上叫动态加载函数库,文件后缀是.dll) 动态函数库:程序执行前(临时)就加入到程序中,由目标程序(动态)调用 优点:1.(数据小)链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。 2.程序升级简单linux动态库,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。 缺点:1.(运行慢)加载速度比静态库慢 2.发布程序需要提供依赖的动态库 2.库的制作 静态库的制作: 先是把功能函数经过gcc(文件名.c) -c 编译成.o文件 ar rcs 静态库的名字 原材料 ar -rcs libtest.a 文件名.o(生成静态库libtest.a) 动态库的制作: gcc -share -fpic 文件名.c -o libcalc.so(生成动态态库libcalc.so) -shared 指定生成动态库 -fpic 标准,用于编译阶段,在生成目标文件就得使用该选项,以生成位置无关的代码。 3.库的使用 静态库的使用: gcc (主函数.c) -ltset -L ./ -o mainProStatic ./mainProStatic -ltest -l是指定要用的动态库,库名去掉lib与.a -L 告诉gcc编译器从-L制定的路径去找静态库。默认从/usr/lib /usr/local/lib去找 动态库的使用: gcc (主函数.c) -lcalc -L ./-o mainproDy 引用动态库,怎么指定动态库的位置 创建一个shell脚本(vi satrt.sh) 加入export LD_LIBRARY_PATH="/home/pi/program/test" ./mainProDy 保存退出(chmod +x start.sh)增加可执行权限 ./mainprody 察看库的大小:du mainProStatic/mainProDy (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |