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

织梦网站怎么做安全措施做网站编辑好还是美工好

织梦网站怎么做安全措施,做网站编辑好还是美工好,有学做衣服的网站吗,做公司标志用哪个网站在前面的文章中讲到可执行程序的生成需要经过预处理,编译,汇编和链接四个步骤,链接阶段是链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。 需要解读一下库文件,我们可以将库文件等价为压缩包文件&…

        在前面的文章中讲到可执行程序的生成需要经过预处理,编译,汇编和链接四个步骤,链接阶段是链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。

        需要解读一下库文件,我们可以将库文件等价为压缩包文件,该文件内部通常包含不止一个目标文件(也就是二进制文件)。值得一提的是,库文件中每个目标文件存储的代码,并非完整的程序,而是一个个实用的功能模块。例如,C 语言库文件提供有大量的函数(如 printf()、memset()、strlen() 等),C++ 库文件不仅提供有使用的函数,还有大量事先设计好的类(如 string 字符串类)。

        库文件的产生,极大的提高了程序员的开发效率,因为很多功能都是现成并且很成熟,使用者根本不需要重新造轮子,直接调取包含该功能的库文件即可。并且,库文件的调用方法也很简单,以 C 语言中的 printf() 输出函数为例,程序中只需引入 <stdio.h> 头文件,即可调用 printf() 函数。

        对于初学者需要区分一下库文件和头文件,库文件我们看不到里面的内容,头文件我们确可以实实在在的看到。那么调用库文件为什么还要牵扯到头文件呢?首先,头文件和库文件并不是一码事,它们最大的区别在于:头文件只存储变量、函数或者类等这些功能模块的声明部分,库文件才负责存储各模块具体的实现部分。读者可以这样理解:所有的库文件都提供有相应的头文件作为调用它的接口。也就是说,库文件是无法直接使用的,只能通过头文件间接调用。

        事实上,库文件只是一个统称,代指的是一类压缩包,它们都包含有功能实用的目标文件。要知道,虽然库文件用于程序的链接阶段,但编译器提供有 2 种实现链接的方式,分别称为静态链接方式和动态链接方式,其中采用静态链接方式实现链接操作的库文件,称为静态链接库;采用动态链接方式实现链接操作的库文件,称为动态链接库。

一:静态库和动态库的概念

1,静态库

        静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。

        链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。

        这里的库指的是静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。

2,动态库

        动态链接(Dynamic Linking),把链接这个过程推迟到了运行时再进行,在可执行文件装载时或运行时,由操作系统的装载程序加载库。

        这里的库指的是动态链接库,Windows下以.dll为后缀,Linux下以.so为后缀。

        值得一提的是,在Windows下的动态链接也可以用到.lib为后缀的文件,但这里的.lib文件叫做导入库,是由.dll文件生成的。

二:静态库和动态库比较

1,静态库优缺点 

        静态链接库实现链接操作的方式很简单,即程序文件中哪里用到了库文件中的功能模块,GCC 编译器就会将该模板代码直接复制到程序文件的适当位置,最终生成可执行文件。

使用静态库文件实现程序的链接操作,既有优势也有劣势:

  • 优势是,生成的可执行文件不再需要任何静态库文件的支持就可以独立运行(可移植性强);
  • 劣势是,如果程序文件中多次调用库中的同一功能模块,则该模块代码势必就会被复制多次,生成的可执行文件中会包含多段完全相同的代码,造成代码的冗余。

        和使用动态链接库生成的可执行文件相比,静态链接库生成的可执行文件的体积更大。在 Linux 发行版系统中,静态链接库文件的后缀名通常用 .a 表示;在 Windows 系统中,静态链接库文件的后缀名为 .lib。

2,动态库优缺点

        动态链接库,又称为共享链接库。和静态链接库不同,采用动态链接库实现链接操作时,程序文件中哪里需要库文件的功能模块,GCC 编译器不会直接将该功能模块的代码拷贝到文件中,而是将功能模块的位置信息记录到文件中,直接生成可执行文件。

        显然,这样生成的可执行文件是无法独立运行的。采用动态链接库生成的可执行文件运行时,GCC 编译器会将对应的动态链接库一同加载在内存中,由于可执行文件中事先记录了所需功能模块的位置信息,所以在现有动态链接库的支持下,也可以成功运行。

采用动态链接库实现程序的连接操作,其优势和劣势恰好和静态链接库相反:

  • 优势是,由于可执行文件中记录的是功能模块的地址,真正的实现代码会在程序运行时被载入内存,这意味着,即便功能模块被调用多次,使用的都是同一份实现代码(这也是将动态链接库称为共享链接库的原因)。
  • 劣势是,此方式生成的可执行文件无法独立运行,必须借助相应的库文件(可移植性差)。

        和使用静态链接库生成的可执行文件相比,动态链接库生成的可执行文件的体积更小,因为其内部不会被复制一堆冗余的代码。在 Linux 发行版系统中,动态链接库的后缀名通常用 .so 表示;在 Windows 系统中,动态链接库的后缀名为 .dll。

三:实战

下面基于Linux来展示静态库和动态库。

我们先准备三个文件

 cprocess.c

#include "cprocess.h"int add(int a, int b)
{return a + b;
}

 cprocess.h

#ifndef __CPROCESS_H
#define __CPROCESS_H#include <stdio.h>
#include <stdlib.h>int add(int a, int b);#endif

 main.c 

#include "cprocess.h"int main()
{int a = 10;int b = 20;printf("10+20=%d",add(a,b));
}

1,静态链接实践

将.c生成目标文件

gcc -c main.c cprocess.c

接下来使用ar工具把cprocess.omain.o打包成一个静态库文件libProcess.a,输入命令

ar rv libProcess.a cprocess.o main.o

最后一步把静态库链接成可执行文件 ,运行

gcc libProcess.a -o cprocess

2,动态链接实践

把cprocess.c编译成动态库文件libProcess.so

gcc cprocess.c  -shared -o libProcess.so

用该动态库文件libProcess.somain.c一起编译生成可执行文件cprocess

gcc main.c /home/cLearning/cprocess/libProcess.so -o cprocess

 

这里链接动态库用的是绝对路径,如果不用绝对路径,该实践的路径又不是在Linux的环境变量中,就会出现找不到动态库的情况

./cprocess: error while loading shared libraries: libProcess.so: cannot open shared object file: No such file or directory

http://www.yayakq.cn/news/795247/

相关文章:

  • 哪个网站是免费的app软件开发工具包
  • 驻马店 市网站建设手机社区网站模板
  • phpcms v9农业网站模板网站怎么设置支付功能
  • 整站seo优化下载软件的app大全
  • 重庆秀山网站建设公司各引擎收录查询
  • 营销型和展示型网站网站排名下降
  • 整站快速排名优化NET开发网站开发工程师招聘
  • 宁波网站建设托管在线编辑图片的网站有哪些
  • 东莞做展示网站的公司wordpress花园商城
  • 做app需要先做网站吗郑州网站app建设
  • 企业 网站 制作go语言可以做网站吗
  • 建设网站的报价赣州市微语网络科技有限公司
  • 做门户网站源码公司logo形象墙效果图
  • 个人可以做网站推广物流企业的网站模板
  • 友情链接添加在网站中有什么用网站搭建中页面
  • 重庆网站网络推广推广建立网站免费
  • 电商网站需要多少钱网站建设及推广外包
  • 广州北京网站建设公司wordpress 图片排列
  • 多多进宝cms网站建设网站utf8乱码
  • 辽宁营商建设局网站服装网站建设比较好
  • 漫画网站php源码羽毛球赛事视频
  • 最好的微网站建设公司购物网站开发历史
  • 怎么样才可以在百度上打广告高州网站seo
  • 用什么做视频网站比较好的wordpress 移动端适配
  • 康定网站建设网站购物车作用
  • 做网站服务器还是虚拟空间好做机械的老板都看什么网站
  • 网站系统建设项目网站建设课程有哪些收获
  • 西安制作网站泌阳网站建设
  • 永修建设局网站wordpress 一键生成app
  • 北网站建设室内设计培训多久