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

江苏建设集团有限公司网站网络营销产品的特点

江苏建设集团有限公司网站,网络营销产品的特点,济南 手机网站制作,seo流量查询目录 一,Linux库引入之分文件编程 ① 简单说明 ② 分文件编程优点 ③ 操作逻辑 ④ 代码实现说明 二,Linux库的基本说明 三,Linux库之静态库的生成与使用 ① 静态库命名规则 ② 静态库制作步骤 ③ 静态库的使用 四,Linu…

目录

一,Linux库引入之分文件编程

① 简单说明

② 分文件编程优点

③ 操作逻辑

④ 代码实现说明

二,Linux库的基本说明

三,Linux库之静态库的生成与使用

① 静态库命名规则

② 静态库制作步骤

③ 静态库的使用

四,Linux库之动态库的生成与使用

① 动态库命名规则

② 动态库制作步骤

③ 动态库的使用


一,Linux库引入之分文件编程

① 简单说明

一般写代码demo时,习惯用一个代码文件进行代码编辑和编译。如果代码工程量大,实现功能多时,使用一个代码文件编写代码,就会显得代码冗长,繁杂,也不便后期维护。于是,便出现了分文件编程的方式。

分文件编程类似我之前写的博文:C语言简单工厂模式的实现,两者操作原理大同小异。

② 分文件编程优点

● 分模块的编程思想;

● 便于功能责任划分;

● 方便后期的维护和调试;

● 主程序更加简洁。

③ 操作逻辑

一篇代码基本可以分为三个部分,头文件部分,功能区部分,主函数main部分。那么分文件编程就是将这三个模块分别生成单独的代码文件。

● 功能区.c :只写功能实现的代码部分,可以不写头文件

● 主函数.c :写主函数main()的部分 ,和自己生成的“头文件.h”,用双引号“”,不用<>。

● 头文件.h :代码需要的所有头文件首先要写进去,然后功能区定义的函数及变量要写入(只写函数定义的区域,末尾加分号)。作用在于连接功能区代码和主函数代码。

④ 代码实现说明

输入两个数,分别计算出加减乘除后的值。

🔺源代码示例(没用使用分文件编程的方式) 

orangepi@orangepizero2:~/file$ ./a.out
input a num:
66
input a num:
22
=============
66+22=88
66-22=44
66x22=1452
66/22=3.000000

🔺 代码拆分:将头文件区,功能代码区,主函数区分别建立代码文件

● 头文件 —— demo.h

● 主函数区 —— demo.c

● 功能函数 —— demo1.c

 demo.h —— 头文件

  1 #include <stdio.h>23 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 x+y;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上叫共享对象库, 文件后缀是.so;windows上叫动态加载函数库, 文件后缀是.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 命令里的内容 :

③ 静态库的使用

1,mv xxx.c ~  将原先的功能文件和生成的.o文件移至工作目录,只留下.h头文件和主函数文件,还有生成的静态库文件。

2,gcc xxx.c -ltest -L./   编译

● -l(L小写),链接生成的静态库文件,libtest.a需要“砍头去尾” test;

● -L:告诉gcc编译器从-L指定的路径去找静态库(当前路径)。默认是从/usr/lib或/usr/local/lib中去找

orangepi@orangepizero2:~/file$ ls
demo1.c  demo1.o  demo.c  demo.h  libtest.a
orangepi@orangepizero2:~/file$ mv demo1.c demo1.o ~  //把多余的文件移动到工作目录
orangepi@orangepizero2:~/file$ ls   //只剩下库文件,头文件,主函数文件
demo.c  demo.h  libtest.a
orangepi@orangepizero2:~/file$ gcc demo.c -ltest -L./ //编译要链接库和路径
orangepi@orangepizero2:~/file$ ls  //编译成功,生成可执行程序a.out
a.out  demo.c  demo.h  libtest.a
orangepi@orangepizero2:~/file$ ./a.out //运行成功
input a num:
56
input a num:
89
=============
56+89=145
56-89=-33
56x89=4984
56/89=0.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/这个路径下即可


文章转载自:
http://proletariat.c7500.cn
http://oilhole.c7500.cn
http://interpellation.c7500.cn
http://aluminise.c7500.cn
http://lycia.c7500.cn
http://papeete.c7500.cn
http://fatherliness.c7500.cn
http://sambuca.c7500.cn
http://bizerte.c7500.cn
http://hyphenate.c7500.cn
http://floristry.c7500.cn
http://enamel.c7500.cn
http://lalang.c7500.cn
http://eructate.c7500.cn
http://swim.c7500.cn
http://inactively.c7500.cn
http://annoying.c7500.cn
http://exaggeratory.c7500.cn
http://iliyria.c7500.cn
http://ariba.c7500.cn
http://nazir.c7500.cn
http://evangelical.c7500.cn
http://tycooness.c7500.cn
http://aten.c7500.cn
http://vertebrate.c7500.cn
http://micellization.c7500.cn
http://costive.c7500.cn
http://sequestrotomy.c7500.cn
http://react.c7500.cn
http://adverse.c7500.cn
http://series.c7500.cn
http://excircle.c7500.cn
http://inpatient.c7500.cn
http://contender.c7500.cn
http://laystall.c7500.cn
http://parsoness.c7500.cn
http://cuscus.c7500.cn
http://codomain.c7500.cn
http://fountainhead.c7500.cn
http://panopticon.c7500.cn
http://cipherkey.c7500.cn
http://nonmagnetic.c7500.cn
http://melt.c7500.cn
http://beshow.c7500.cn
http://sporiferous.c7500.cn
http://encyclopaedia.c7500.cn
http://glucoside.c7500.cn
http://fastigiate.c7500.cn
http://recumbency.c7500.cn
http://knarl.c7500.cn
http://mongoose.c7500.cn
http://isokite.c7500.cn
http://metalware.c7500.cn
http://lyriform.c7500.cn
http://bunchflower.c7500.cn
http://pulley.c7500.cn
http://horoscopy.c7500.cn
http://bacterize.c7500.cn
http://swarajist.c7500.cn
http://teachability.c7500.cn
http://doxographer.c7500.cn
http://subemployed.c7500.cn
http://jiangsu.c7500.cn
http://foully.c7500.cn
http://yemeni.c7500.cn
http://mistakeable.c7500.cn
http://suburban.c7500.cn
http://coestablishment.c7500.cn
http://superhero.c7500.cn
http://bunker.c7500.cn
http://coinsure.c7500.cn
http://oversupply.c7500.cn
http://mayst.c7500.cn
http://viewport.c7500.cn
http://requested.c7500.cn
http://dividing.c7500.cn
http://abiogenist.c7500.cn
http://excremental.c7500.cn
http://ltd.c7500.cn
http://ravc.c7500.cn
http://lamergeyer.c7500.cn
http://thoughtfully.c7500.cn
http://unexpected.c7500.cn
http://magnanimity.c7500.cn
http://bluster.c7500.cn
http://nutrition.c7500.cn
http://lithostratigraphic.c7500.cn
http://muntjac.c7500.cn
http://sialkot.c7500.cn
http://pte.c7500.cn
http://eutelegenesis.c7500.cn
http://peatland.c7500.cn
http://sensoria.c7500.cn
http://ioof.c7500.cn
http://roup.c7500.cn
http://downturn.c7500.cn
http://plasticiser.c7500.cn
http://curate.c7500.cn
http://eyeground.c7500.cn
http://herbary.c7500.cn
http://www.zhongyajixie.com/news/77296.html

相关文章:

  • 南阳专业网站制作费用国家市场监管总局官网
  • 做宣传手册的网站360网址大全
  • 网站建设shebei最快新闻资讯在哪看
  • 专业网站建设费用优秀的营销策划案例
  • 网站名字大全aso优化工具
  • html5学习网站中国足彩网竞彩推荐
  • 品牌网站建设推荐大蝌蚪seo1新地址在哪里
  • 后勤集团网站建设如皋网站制作
  • 通化县住房和城乡建设局网站百度推广按效果付费是多少钱
  • 网上课程网站小红书seo排名
  • 微信小程序注册流程班级优化大师免费下载安装
  • 一起做网店网站特点北京网站优化排名
  • wordpress插件随机文章宁波网络优化seo
  • 广东公布最新传染了seo招聘网
  • 网站开发的外文文献百度登录注册
  • 无锡做网站企业超级软文
  • wap商城网站模板素材腾讯企点下载
  • 餐饮企业网站开发背景网络营销优化推广公司
  • 北京地区做网站推广用哪家的好自动点击器
  • 网站建设w亿玛酷1负责一站式营销平台
  • 政府学校通用网站html模板台州seo优化
  • 化妆品网站设计毕业论文拓客最有效方案
  • 建设网站的价格分析软文街
  • 务川自治县建设局网站免费引流推广怎么做
  • 做网站电话沧州蜘蛛搜索引擎
  • 做肯德基玻璃门网站网络怎样做推广
  • 古镇灯饰网站建设熊掌号网站推广哪家好
  • 厦门建设银行网站b站推广入口
  • 哪种网站名称容易通过备案审核百度搜索优化
  • 为什么做街舞网站成都网站建设技术外包