搞懂链接器2:库与可执行文件的生成
链接器可以操作的最小单元为目标文件,也就是说无论是静态库、动态库、可执行文件,都是基于目标文件构建出来的。目标文件就好比乐高积木中最小的零部件。
给定目标文件以及链接选项,链接器可以生成两种库,分别是静态库以及动态库,如图所示,给定同样的目标文件,链接器可以生成两种不同类型的库,接下来我们分别介绍。
静态库假设这样一个应用场景,基础设计团队设计了好多实用并且功能强大的工具函数,业务团队需要用到里面的各种函数。每次新添加其中一个函数,业务团队都要去找相应的实现文件并修改链接选项。使用静态库就可以解决这个问题。静态库在Windows下是以.lib为后缀的文件,Linux下是以.a为后缀的文件。
为解决上述问题,基础设计团队可以提前将工具函数集合打包编译链接成为静态库提供给业务团队使用,业务团队在使用时只要链接该静态库就可以了,每次新使用一个工具函数的时候,只要该函数在此静态库中就无需进行任何修改。
你可以简单的将静态库理解为由一堆目标文件打包而成, 使用者只需要使用其中的函数而无需关注该函数来自哪个目标文件(找到函数实现所在的目标文件是链接器来完成的,从这里也可以看出,不是所有静态库中的 ...
搞懂链接器1:链接器定义和符号决议
什么是链接器 (Linker)维基百科的定义为:
链接器 (英语:Linker),是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库,链接为一个可执行文件。
在Unix-like系统上常用的链接器是GNU ld。目标文件是包括机器码和链接器可用信息的程序模块。简单的讲,链接器的工作就是解析未定义的符号引用,将目标文件中的占位符替换为符号的地址。链接器还要完成程序中各目标文件的地址空间的组织,这可能涉及重定位工作。大多数现代操作系统都提供动态链接和静态链接两种形式。
为便于理解,可将链接器的定义分解成如下三点:
首先是链接器的本质,链接器本质上也是一个程序,和我们经常使用的普通程序没什么不同。
接器的输入是编译器编译好的目标文件(object file)。
链接器的输出,链接器在将目标文件打包处理后,生成或者可执行文件,或者库,或者目标文件。
从这个定义中能够看出,链接器的作用有点类似于我们经常使用的压缩软WinRAR (Linux下是tar),压缩软件将一堆文件打包压缩成一个压缩文件,而链接器和压缩软件的区别在于链接器是将多个目标文件打包成一个文件而不进行压缩。
符号 ...
通过hexo-pdf插件在博客上发布pdf
我又回来写hexo博客的技术笔记了,因为有一个大(cai)佬(bi)他平时的文档都是用latex写得,发博客有点麻烦,所以要用嵌入pdf的方式进行发表,但是hexo原生不支持pdf,所以我就写了这个教程附带了hexo博客平时的部署方法,供参考。
安装PDF插件
进入你个人博客本地的根目录,在命令行中打开,并运行
12BASHnpm install --save hexo-pdf
PDF发表 这一步在国内有两种可行办法,一种是使用本地的文件,让hexo从博客中加载,一种就是放在云端的存储仓库进行加载。这里两种方法都做演示,但是推荐使用后者。
方法一:本地仓库
这个方法比较简单,但是效果较差,可能会造成较大的卡顿,首先在本地的根目录下打开source在这个文件夹下直接将你的pdf放进去即可。
在你的本地的博客根目录下新建一篇文章命令行
12BASHhexo new "文章名称"
到你的根目录里的source/_posts文件夹中找到新建的文章,在完成了文章的头部编辑之后,在正文部分只用加一句
12BASH{% pdf /你自己刚刚放的pdf文档的名称 ...
计算机基础知识-软硬件和汇编
三大原则
计算机是执行输入、运算、输出的机器
程序是指令和数据的集合
计算机处理方式有时和人类思维习惯不同
计算机只会输入、运算、输出计算机由大量的IC(集成电路)组成,每块IC上都有很多引脚,用于输入和输出。IC将输入的信息进行运算,并把运算结果输出。
软件是指令和数据的集合指令就是控制计算机进行输入、运算、输出的命令,把向计算机发出的命令一条条记录下来就构成了程序。程序执行的过程就是计算机依次执行这些指令的过程。把一组指令取个名字就叫做函数了。
数据就是在程序运行过程中需要的内容,比如变量。
计算机认为一切都是数字比如人们所说的颜色,计算机都用数字编码来表示,如用“0,0,255”表示蓝色。
计算机硬件组成计算机硬件有三个基本要素:
CPU:负责解释、执行指令,从而执行程序。从内存或I/O输入数据,在内部进行运算,再把运算结果输出到内存或I/O。
内存:存放程序,程序又是指令和数据和集合。
I/O:临时存放着用于和周边设备进行输入输出的数据。
参考资料《计算机是怎样跑起来的》
从0开始学习GitHub系列.pdf
《从0开始学习GitHub系列》
Butterfly的外挂标签引入后写作技巧
行内文本样式 text1234561. 带 {% u 下划线 %} 的文本2. 带 {% emp 着重号 %} 的文本3. 带 {% wavy 波浪线 %} 的文本4. 带 {% del 删除线 %} 的文本5. 键盘样式的文本 {% kbd command %} + {% kbd D %}6. 密码样式的文本:{% psw 这里没有验证码 %}
带 下划线 的文本
带 着重号 的文本
带 波浪线 的文本
带 删除线 的文本
键盘样式的文本 command + D
密码样式的文本:这里没有验证码
行内文本 span123456- 彩色文字在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span b ...
mount命令-挂载磁盘
mount命令介绍用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载。
mount命令常用参数
-t
指定挂载类型
-a
加载文件“/etc/fstab”中描述的所有文件系统
示例挂载 /dev/cdrom 到 /mnt:
1[root@linuxcool ~]# mount /dev/cdrom /mnt
启动所有挂载:
1[root@linuxcool ~]# mount -a
挂载nfs格式文件系统:
1[root@linuxcool ~]# mount -t nfs /123 /mnt
df命令-显示磁盘空间
df命令介绍df命令的英文全称即Disk Free,顾名思义功能是用于显示系统上可使用的磁盘空间。默认显示单位为KB,建议使用“df -h”的参数组合,根据磁盘容量自动变换合适的单位,更利于人性化阅读。
日常普遍用该命令可以查看磁盘被占用了多少空间、还剩多少空间等信息。
df命令常用参数
-a
显示所有系统文件
-h
以容易阅读的方式显示
示例df默认选项123456789[root@paopao ~]# dfFilesystem 1K-blocks Used Available Use% Mounted ondevtmpfs 347636 0 347636 0% /devtmpfs 362780 0 362780 0% /dev/shmtmpfs 362780 41188 321592 12% /runtmpfs 362780 0 362780 0% /sys/fs/cgroup/d ...
yum命令-RPM包管理器
yum命令介绍yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum命令常用参数
-h
显示帮助信息
-y
对所有的提问都回答“yes”
install
安装rpm软件包
update
更新rpm软件包
check-update
检查是否有可用的更新rpm软件包
remove
删除指定的rpm软件包
list
显示软件包的信息
search
检查软件包的信息
info
显示指定的rpm软件包的描述信息和概要信息
clean
清理yum过期的缓存
resolvedep
显示rpm软件包的依赖关系
localinstall
安装本地的rpm软件包
localupdate
显示本地rpm软件包进行更新
deplist
显示rpm软件包的所有依赖关系
国内 yum 源网易(163)yum源是国内最好的yum源之 ...
rz、sz命令-文件传输
1. 软件安装rz/sz命令用来在xshell远程服务器和本地之间传输文件,主要有两种方式安装,yum安装或者编译安装。
1.1 yum包安装root账号登陆后执行以下命令:
yum install -y lrzsz
2.2 源码编译安装root账号登陆后,依次执行以下命令:
cd /tmpwget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gztar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20./configure && make && make install
上面安装过程默认把lsz/lrz安装到了/usr/local/bin/目录下,现在我们还不能使用sz/rz命令,需要手动建立软链接:
cd /usr/binln -s /usr/local/bin/lsz szln -s /usr/local/bin/lrz rz
2. 使用说明2.1 sz命令:发送文件到本地目录
sz filename
2.2 rz命令:将 ...





