binarylinux

如题所述

如何正确的使用静态链接库和动态链接库?

动态库和静态库

在Win下,动态库以.dll结尾,静态库以.lib结尾。

在Linux下,动态库文件以.so结尾,静态库以.a结尾。

在Mac下,动态库以.dylib结尾,静态库以.a结尾。

动态库的优势和劣势

动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。

某个程序在运行时要调用某个动态链接库函数的时候,OS首先查看所有正在运行的进程,找找看是否已经有人载入了这个库。如果有的话,直接用。如果没有才会载入。这样的第一个优点就是节省内存空间。动态调入意味着是等需要的时候才调入内存,而不是不管用不用都要先放到内存里来。

我如果想要升级某个软件。如果升级的位置是在dll里,那软件其他的部位不需要重新编译链接。所以升级方便。

静态库的优势和劣势

利用静态函数库编译成的文件比较大,因为整个函数库在编译时都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果你静态链接的函数库改变了,那么你的程序必须重新编译。

代码更精简,因为不必做版本检查。

程序分发时文件个数少,因为静态链接到源文件里了。

只编译进来库中所用的部分,而不用整个库。

生成的binary占空间更大。

重复的库可能出现在多个进程,浪费内存。

库内部更新的话需要重新编译binary。

Linux平台的静态库

静态库的生成静态库的链接

Linux平台的动态库

动态库的生成动态库的链接

Windows平台的静态库

静态库的生成/MT使用LIBCMT.lib编译以创建多线程可执行文件。生成静态库lib。r静态库的链接

1、在使用链接库的代码开头加入,第二行是要调用的链接库里的函数:

2、将要调用的链接库的lib放入项目源代码中,然后编译。(编译的时候不需要dll。这里把静态部分lib编译进了exe,但动态库dll还没用。)

3、运行之前要把dll放到exe目录下。

Windows平台的动态库

动态库的生成/MD使用MSVCRT.lib编译以创建多线程DLL。生成动态库。r动态库的链接

1、LoadLibrary(或MFC的AfxLoadLibrary),装载动态库。

2、GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。

3、FreeLibrary(或MFC的AfxFreeLibrary),释放动态链接库。

一天一点学习Linux之文件类型和后缀名?

linux常见的文件类型

一般的文件

这个就是我们通过ls-l列出来,第一栏第一个字符是-的文件,根据文件的内容也可以分几类:

纯文本文件(ASCII):这个就相当于记事本一样,称为纯文本文件,我们可以直接读取文件里面的内容。这种文件在linux系统中占很多。

二进制文件(binary):linux系统中的可执行文件(scripts)就是一个二进制的文件,而且这个文件要有x权限才能被执行。我们系统中的一些命令就是这类型的文件。

数据格式文件(data):在linux系统中,有些程序在运行的时候会读取某些特定的数据库,这些文件就是数据文件。如我们前面讲的last命令,调用的就是/var/log/wtmp,如果我们用cat命令来查看/var/log/wtmp这个文件,你发现全是乱码。

关于一些其他的文件类型,如连接文件、设备文件、数据接口文件(sockets)、管道文件(pipe)等等,这些也是一些特殊的文件类型,我们只需要了解就OK了,在后面的学习中,见到的时候,你要知道他是什么东西就可以了。如果想更深入的学习,那就找相关的资料,慢慢研究,如,如何查看一个数据文件等。

linux文件的后缀名

我们在刚开始的时候也说过,在linux系统上,对这个后缀名要求并不像微软的win系统一样严格,只是为了方便确认文件是什么样的文件,才在后面加上了相应的后缀。如果一个文件能用cat命令读取里面的内容,我们改了后缀后,同样还是能用cat读取出来。

我们也知道,在微软的win系统上,常用的可执行文件一般就是以.com、.bat、.exe来结尾。而在我们的linux系统上就不一样了,什么样的文件我都可以给他加上X(可执行)权限,但能不能执行成功,就要看文件本身的内容了。这里面有重要的一点,就是可以被执行和可以执行成功是不一样的。例如,我们在root用户的家目录里面有个install.log文件,我们给他加上X权限,虽然是可以执行的文件,但执行后,没有什么结果,因为这个文件里面内容不是我们系统所能执行的,当然他是执行不成功啦!

所以说,为了方便我们认识系统中的文件是干吗的。linux系统还是会以相应的后缀名来表示文件的种类的。下面我们就看看一些常见的后缀

.sh:这个通常是我们自己写的一些脚本(scripts)文件,一般都是通过shell写的,所以以.sh来表示。

.z,.tar,.tar,.gz,.zip,.tgz:这一类的文件就是压缩文件,只是采用的压缩方式不同而已。

.log:这一类文件,就是一些日志文件。

.conf:这类文件就是一些配置文件,这个在linux系统上见到的最多。

.rpm:这是红帽的软件包,当然,不同的linux发行版本,他们使用的软件包的后缀是不一样的。

.php,.jsp,.html,.css:这一类,都是网站类型的文件。

当然还有一些其它的后缀,没有什么太大的意义,只是为了我们方便识别,我们简单的了解一下。

这个长度已经很长了,足够我们用了。在后面的学习中,你会发现,linux系统上,很多软件的名字都很长,如果一个字一个字的打会很浪费时间,而且有时还会打错,这是不是太不方便了?当然不是啦,长文件名,有利于我们知道这个文件是干吗的(我是这么认为的),其实是在方便我们。为了不让我们打那么多的字,在linux系统上,有一个重要的功能键,那就是TAB,这个有补全作用,只要打前几个字,再按TAB,就补全了,如果按两次的话,会显示和这几个字相关的内容。哈哈,使用linux的朋友不知道这个功能,或不用会这个的话,那就太失败了!

linux系统中文件的命名规则

我们知道,在linux系统上,基本上都是用命令来操作的,我们所用的shell,自身就有很多的特殊字符,如果我们的文件名和这个shell里面的特殊字符一样的话,那就不好办了,所以我们在给文件起名的时候,在方便识别的同时,也要避免一些特殊字符,下面我们列举出来,代大家参考(并非不能命令这些字符,只是建议避免)。

Linux的所有文件格式?

linux中有七种文件类型:

普通文件类型;

目录文件类型;

块设备文件类型;

字符设备类型;

套接字文件类型;

管道文件类型;

链接文件类型。

普通文件类型

最常使用的一类文件,其特点是不包含有文件系统信息的结构信息。通常用户所接触到的文件,比如图形文件、数据文件、文档文件以及声音文件都属于这种文件,这种类型的文件是按照其内部结构又可分为纯文本文件(ASCII)、二进制文件(binary)、数据格式的文件(data)、各种压缩文件。

纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设置文件几乎都属于这种文件类型。举例来说,使用命令“cat~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。

二进制文件(binary):系统其实仅认识且可以执行二进制文件(binaryfile)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。

数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(datafile)。举例来说,Linux在用户登入时,都会将登录数据记录在/var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。

目录文件类型

用于存放文件名以及其相关信息的文件,是内核组织文件系统的基本节点。目录文件可以包含下一级文件目录或者普通文件,在Linux中,目录文件是一种文件。

能用#cd命令进入的。

块设备文件类型

块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是/dev/hda1等文件。

字符设备类型

字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。

套接字文件类型

这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。

管道文件类型

是一种很特殊的文件,主要用于不同进程的信息传递。当两个进程需要进行数据或者信息传递时,可以使用通道文件,一个进程将需要传递的数据或者信息写入管道的一端,另一进程从管道的另一端取得所需要的数据或者信息,通常管道是建立在调整缓存中。

链接文件类型

是一种特殊文件,指向一个真实存在的文件链接,类似于Windows下的快捷方式,链接文件的不同,又可分为硬链接文件和符号链接文件。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网