概念
真正可以执行的是二进制文件(shell脚本仍是通过调用二进制文件来执行的),可以利用flie命令来查看是否是二进制文件;
通过编译+链接函数库来形成目标文件–如gcc的一些命令
Tarball软件包
其实是一个压缩包,通常用tar打包再压缩,解压后一般有如下文件:
源代码文件
检测程序文件(如configure)
本软件的简易说明或安装说明
流程:
管理
- 取得原始文件:将 tarball 文件在 /usr/local/src 目录下解压缩;
- 取得步骤流程:进入新建立的目录底下,去查阅INSTALL与README等相关档案内容(很重要的步骤! );
- 依赖属性软件安装:根据INSTALL/README的内容察看并安装好一些相依的软件(非必要);
- 创建 makefile:以自动检测程序 (configure 或 config) 检测作业环境,并建立 Makefile 这个文件;
- 编译:以 make 这个程序并使用该目录下的 Makefile 做为他的参数设定文件,来进行 make (编译或其他) 的动作;
- 安装:以 make 这个程序,并以 Makefile 这个参数配置文件,依据 install 这个标的 (target) 的指定来安装到正确的路径!
–
安装命令流程
-
./configure
这个步骤就是在建立 Makefile 这个文件啰! 通常开发者会写一支 scripts 来检查你的 Linux 系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安装信息都是这一步骤内完成的! 另外,此步骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的文件!
-
make clean
make 会读取 Makefile 中关于 clean 的工作。 这个步骤不一定会有,但是希望执行一下,因为他可以去除目标档案! 因为谁也不确定源代码里面到底有没有包含上次编译过的目标文件 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的执行文件我们可以确定是使用自己的机器所编译完成的嘛!
-
make
make 会依据 Makefile 当中的默认工作进行编译的行为! 编译的工作主要是进行 gcc 来将源代码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完整的执行文件! 使用 make 就是要将源代码编译成为可以被执行的可执行文件,而这个可执行文件会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;
-
make install
通常这就是最后的安装步骤了,make 会依据 Makefile 这个档案里面关于 install 的项目,将上一个步骤所编译完成的资料给他安装到预定的目录中,就完成安装啦!
注意:需要按顺序完成,不然下面步骤不能生效
–
安装目录指定
etc, lib, bin, man 等目录当中,分别代表’设定文件、函式库、执行文件、线上说明文件
我们一般安装在 /usr/local/ 里,方便管理
目录安装管理分为两种:
1安装默认目录里 /usr/local/etc… {
路径会在PATH内,所以可以直接使用软件名调用,man之类的也可以直接查到
}
2 安装软件单独目录/usr/local/软件名/etc…{
必须手动写入PATH内,不然只能使用绝对路径调用
删除时 直接删除软件名目录即可,方便
}
===
利用patch 更新源代码
需要有开发商发布的patch文件 加上make工具更新编译 来完成局部更新
注意: 你还是得要将该软件进行编译后,才会是最终正确的软件喔! 因为 patch 的功能主要仅只是更新源代码文件而已
gcc编译与链接
GCC 编译器的使用 – 知乎
make与 configure
列如:如果有多个源文件,必须要先分别-c编译 再一起链接一起来很麻烦
make是个程序,会自动判断源代码是否更新来简化编译(链接)过程;
执行make时,会在当前文件夹寻找makefile这个规则文件—通常开发商会写一个检测程序configu来检测用户环境自动产生makefile文件;
makefile语法
例如:
$@代表当前的方法标识符
会自动执行makefile里的标识符内容
??
与bash shell script的语法有点不太相同,变数的基本语法为:
- 变量与变量内容以『=』隔开,同时两边可以具有空格;
- 变量左边不可以有
,例如上面范例的第一行LIBS 左边不可以是 ; - 变量与变量内容在『=』两边不能具有『:』;
- 在习惯上,变量最好是以『大写字母』为主;
- 运用变量时,以${变量} 或$(变量) 使用;
- 在该shell 的环境变量是可以被套用的,例如提到的CFLAGS 这个变量!
- 在指令列模式也可以给予变数。
–
环境变量CFLAGS
gcc编译时会自动去读取这个变量的内容;–可以再bash环境里,编译命令行中,makefile文件内指定;
优先顺序:
- make 指令列后面加上的环境变数为优先;
- makefile 里面指定的环境变数第二;
- shell 原本具有的环境变数第三。
–
函数库管理
基本上都放在/lib64 ,/lib目录中
静态/动态函数库
静态:libXXX.a –在编译时会直接整合在源文件中,所以体积较大
动态: libxxx.so– 只是在源文件中存放一个指针,使用时才会去读取函数库;{
虽然无法独立运行,但升级函数库时不用重新编译源文件;
}
优先加载入内存中
流程:
- 首先,我们必须要在 /etc/ld.so.conf 里面写下『 想要读入快取内存当中的动态函式库所在的目录』
- 接下来则是利用 ldconfig 这个执行程序 将 /etc/ld.so.conf 的数据读入内存当中;
- 同时也将资料记录一份在 /etc/ld.so.cache 这个档案当中呐!
–
解析动态函数库ldd
用来查看 依赖函数库之间的相关性
校验软件源代码的正确性
源代码可能遭遇修改,有风险;
可以利用MD5, SHA1 或 SHA256 加密机制来处理,获得一个唯一计算码,比较两次码值,若不一样则表示被修改过;
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作93809 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!