Linux :初识动静态库,条件编译以及怎么添加sudoer

我们先看一下怎么添加sudoer

step1

step2:

这样即可

然后退出

条件编译

如果把define去掉就会输出社区版免费版

怎么以命令行的级别加入define呢?

为什么能在命令行级别加入define呢?因为我们的预处理是对文本进行编辑,把这个define插上去完全没问题

那么,条件编译有什么用?正如我们上面那段代码所描述的

我们可以通过条件编译来管理我们的专业版和社区版软件,省的我们管理两份代码,徒增管理成本

第二个就是我们可以通过条件编译来裁剪linux内核,比如有的操作系统不需要那么多功能,我们可以用条件编译把它裁掉就行了

第三个 就是 开发工具,应用软件 有的软件既可以在window上跑也能在linux跑,这也是条件编译的功劳

接下来 我们来说一下,为啥我们的程序编译都要先转成汇编语言,再编译成二进制语言?

我们的编译发展---从最开始的开关编译 到打孔编译,一直到汇编语言的产生,一切都好说了

汇编语言刚产生的时候是用二进制汇编编译器的,接下来就能用汇编语言做汇编编译器了

接下来C语言诞生,C++诞生,java python等等各种语言,我们不能让每一种语言想办法直接转成二进制,所以我们就可以用这些新诞生的语言先转成汇编语言,然后再用汇编语言转换成二进制指令,因为汇编语言的编译已经很成熟了,就不用我们再给c转二进制做个东西,给c++转二进制做个东西了,相当于我们站在了前人的肩膀上来做这些东西

然后呢,我们不只是这方面可以站在前人的肩膀上,我们的各种常用的功能也有依靠的东西 

那就是库,分为动态库和静态库

动态库后缀.so,windows下为ddl

静态库后缀 .a,windows下为lib

库是啥?就是一套方法,数据集,能帮助我们更方便的进行二次开发

我们的库一般都存在lib里面

C语言库的名字是 libc.so 动态 libc.a 静态

我们常用的printf函数什么的都在这里

动态库和静态库有啥区别呢?

如果是动态库的话,我们函数调用的话会直接转换成一串地址,去我们的动态库里找这个函数往下执行,然后再返回

如果是静态库的话,我们函数调用的时候,会把这个函数拷贝到我们的代码里面

静态库只有在链接的时候有用,链接完形成可执行程序之后就不再需要它了

更深刻理解动态库和静态库

   

如果是静态调用的话,我们会把方法直接拷贝到程序里,会占用更大的内存空间

如果是动态调用的话

我们会直接第一次用到动态库的时候把动态库的方法加载到内存上,接下来程序再用动态库直接在内存里找到它就行了,所以动态库也叫共享库

接下来我们来说一下动态库和静态库的优缺点

1,动态库形成的可执行程序的体积一定比静态库要小

2,可执行程序对静态库的依赖较小,对动态库的依赖很大

3.程序允许需要加载到内存,如果是静态库的话,会在内存中出现大量重复的代码

4.动态链接,比较节省内存和磁盘资源

sudo yum install -y glibc-static

可以看到,我们默认链接的就是动态库

那我们怎么用静态库链接呢?

想用静态库链接,就得先有静态库才行

我们得先安装静态库

sudo yum install -y glibc-static

这就是我们的安装静态库的命令

这下就是静态链接了

我们再示范一下c++代码的链接

sudo yum install gcc-c++

这是下载c++编译的命令

依然还是动态链接

我们再试一下静态链接c++

yum install libstdc++-static

我们大多数的linux命令也是依赖动态库的

链接完成,接下来我们从技术角度理解一下什么是库,怎么链接

我们可以直接这样链接,但是真正的库是不会显示方法的内容的,它会把内容隐藏,所以实际上如果想真正模拟我们的库的话,我们需要的是.o文件,也就是二进制部分

这样就是真正模拟我们的库了

好的,这就是这篇文章的全部内容

下面我们快速了解一下make和makefile,为下文做铺垫

1.是什么?

makefile是一个文件

make是一个命令

2.makefile怎么写

第一行是依赖关系,第二行是依赖方法

经过make就有我们的可执行程序了,至于更细的内容,我们下回分解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌大饺子 dot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值