公司网站建设开发国外创意设计网站

当前位置: 首页 > news >正文

公司网站建设开发,国外创意设计网站,合山网络推广,wordpress 实时更新目录 一#xff0c;Linux库引入之分文件编程 ① 简单说明 ② 分文件编程优点 ③ 操作逻辑 ④ 代码实现说明 二#xff0c;Linux库的基本说明 三#xff0c;Linux库之静态库的生成与使用 ① 静态库命名规则 ② 静态库制作步骤 ③ 静态库的使用 四#xff0c;Linu…目录 一Linux库引入之分文件编程 ① 简单说明 ② 分文件编程优点 ③ 操作逻辑 ④ 代码实现说明 二Linux库的基本说明 三Linux库之静态库的生成与使用 ① 静态库命名规则 ② 静态库制作步骤 ③ 静态库的使用 四Linux库之动态库的生成与使用 ① 动态库命名规则 ② 动态库制作步骤 ③ 动态库的使用 一Linux库引入之分文件编程 ① 简单说明 一般写代码demo时习惯用一个代码文件进行代码编辑和编译。如果代码工程量大实现功能多时使用一个代码文件编写代码就会显得代码冗长繁杂也不便后期维护。于是便出现了分文件编程的方式。 分文件编程类似我之前写的博文C语言简单工厂模式的实现两者操作原理大同小异。 ② 分文件编程优点 ● 分模块的编程思想 ● 便于功能责任划分 ● 方便后期的维护和调试 ● 主程序更加简洁。 ③ 操作逻辑 一篇代码基本可以分为三个部分头文件部分功能区部分主函数main部分。那么分文件编程就是将这三个模块分别生成单独的代码文件。 ● 功能区.c 只写功能实现的代码部分可以不写头文件 ● 主函数.c 写主函数main()的部分 和自己生成的“头文件.h”用双引号“”不用。 ● 头文件.h 代码需要的所有头文件首先要写进去然后功能区定义的函数及变量要写入(只写函数定义的区域末尾加分号)。作用在于连接功能区代码和主函数代码。 ④ 代码实现说明 输入两个数分别计算出加减乘除后的值。 源代码示例没用使用分文件编程的方式  orangepiorangepizero2:~/file\( ./a.out input a num: 66 input a num: 22662288 66-2244 66x221452 66/223.000000 代码拆分将头文件区功能代码区主函数区分别建立代码文件 ● 头文件 —— demo.h ● 主函数区 —— demo.c ● 功能函数 —— demo1.c demo.h —— 头文件 1 #include stdio.h23 int add(int x,int y);//加法4 int sub(int x,int y);//减法5 int mul(int x,int y);//乘法6 float div(int x,int y);//除法 demo.c —— 主函数 2 #include demo.h//自建头文件用双引号“”里面包含功能区函数的定义及参数3 //连接主函数和功能区代码 4 int main()5 {6 int data1;7 int data2;8 int value;910 printf(input a num:\n);11 scanf(%d,data1);12 printf(input a num:\n);13 scanf(%d,data2);1415 printf(\n);1617 printf(%d%d%d\n,data1,data2,add(data1,data2));//加18 printf(%d-%d%d\n,data1,data2,sub(data1,data2));//减19 printf(%dx%d%d\n,data1,data2,mul(data1,data2));//乘20 printf(%d/%d%f\n,data1,data2,(float)div(data1,data2));//除21 return 0;22 } demo1.c —— 功能代码区 1 int add(int x,int y)//加法2 {3 return xy;4 }5 int sub(int x,int y)//减法6 {7 return x-y;8 }9 int mul(int x,int y)//乘法10 {11 return x*y;12 }13 float div(int x,int y)//除法14 {15 return (float)x/y;16 }编译说明 二Linux库的基本说明 一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化更容易重新编译而且更方便升级。   通俗点说明你可以使用我的代码但是你不能看我的代码                       编译时会链接到我们生成的库文件程序可以正常编译运行但如果常规使用vi打开库文件就是一页乱码。 程序函数库可分为3种类型静态函数库static libraries、共享函数库shared libraries、动态加载函数dynamicallyloaded libraries  ● 静态函数库是在程序执行前就加入到目标程序中去了 ● 动态函数库与共享函数库两者其实一样在linux上叫共享对象库 文件后缀是.sowindows上叫动态加载函数库 文件后缀是.dll 三Linux库之静态库的生成与使用 静态函数库是在程序执行前编译就加入到目标程序中去了 一般将功能性代码生成库文件 优点 ● 静态库在编译的时候就被打包到应用程序中所以其加载的速度快; ● 发布程序的时候无需提供静态库因为已经在app中移植方便; 缺点 ● 链接时完整的拷贝到可执行文件中被多次使用就会有多份冗余拷贝 ● 更新部署发布麻烦 ① 静态库命名规则 静态库文件的命名方式“libxxx.a”,库名前加“lib”后缀用“.a”“xxx”为静态库名  ② 静态库制作步骤 原材料xxx.c文件 1将 xxx.c 文件生成 xxx.o 文件gcc xxx.c -c; 2将 xxx.o 文件生成 libtest.a 静态库文件ar  rcs  libtest.a  xxx.o         生成的静态库文件通过主函数的链接后正常编译运行但并不能打开库文件查看里面的内容也是库文件制作的目的所在  ar 命令里的内容  ③ 静态库的使用 1mv xxx.c ~  将原先的功能文件和生成的.o文件移至工作目录只留下.h头文件和主函数文件还有生成的静态库文件。 2gcc xxx.c -ltest -L./   编译 ● -l(L小写)链接生成的静态库文件libtest.a需要“砍头去尾” test; ● -L:告诉gcc编译器从-L指定的路径去找静态库当前路径。默认是从/usr/lib或/usr/local/lib中去找 orangepiorangepizero2:~/file\) ls demo1.c demo1.o demo.c demo.h libtest.a orangepiorangepizero2:~/file\( mv demo1.c demo1.o ~ //把多余的文件移动到工作目录 orangepiorangepizero2:~/file\) ls //只剩下库文件头文件主函数文件 demo.c demo.h libtest.a orangepiorangepizero2:/file$ gcc demo.c -ltest -L./ //编译要链接库和路径 orangepiorangepizero2:/file\( ls //编译成功生成可执行程序a.out a.out demo.c demo.h libtest.a orangepiorangepizero2:~/file\) ./a.out //运行成功 input a num: 56 input a num: 895689145 56-89-33 56x894984 56890.629214 四Linux库之动态库的生成与使用 动态函数库是在程序执行时动态临时由目标程序去调用 优点 ● 链接时不复制程序运行时由系统动态加载到内存供程序调用系统只加载一次多个程序可以共用节省内存 ● 程序升级简单因为app中没有库的源代码升级之后只要库的名字不变函数名与及参数不变只是做了优化就能加载成功 缺点 ● 加载速度比静态库慢 ● 发布程序时需要提供依赖的动态库 ① 动态库命名规则 动态库的命名方式“libxxx.so”, 库名前加“lib”后缀用“.so”“xxx”为动态库名 ② 动态库制作步骤 原材料xxx.c 文件 生成.so文件gcc -shared -fpic xxx.c -o libtest.so ● -shared必须使用的关键字指定生成动态库 ● -fpic执行标准作用于编译阶段在生成目标文件时就得使用该选项 ③ 动态库的使用 gcc xxx.c -ltest -L./   编译后生成默认a.out可执行程序也可以自行-o生成执行程序 ● -l(L小写)链接生成的静态库文件libtest.so需要“砍头去尾” test; ● -L:告诉gcc编译器从-L指定的路径去找静态库当前路径。默认是从/usr/lib或/usr/local/lib中去找 ✳编译没问题但是结果出了问题。动态库运行和静态库的运行方式有区别的静态库直接生在在可执行的程序中而动态库是在程序执行时动态临时由目标程序去调用需要去找到执行的文件目录所以上面的动态库执行出错。 解决方法把生成的动态库文件libtest.so拷贝到/usr/lib/这个路径下即可