Linux系统之程序源码编译与安装(理论+实战)

Linux系统之程序源码编译与安装(理论+实战)本文主要介绍了如何在 Linux 系统下编译并安装程序软件 并详细介绍了编译原理 步骤 方法 编译器种类等 linux 源码

大家好,欢迎来到IT知识分享网。

一、什么是编译器?

cfd6ab3168994c40bb025f34bd3a3c2d.png

bc942e22af034bff8bb31ecdc6aa10dd.png

二、编译器预处理功能

24d1441b7dca42eb896ec637ec172eab.png

3b2329e520eb410abdc94811ebe93237.png860e62e2efa44df4a262710daa97df45.png 746a4f3e9aa3499692f24949d7977ccd.png

904332d52c4049828c2deb4b7147a78f.png 行标记:源文件名和行号通过格式为#linenum文件名标志的行来传递。代表下一行起源于文件filename中的linenum行。
行末数字标准含义:
‘1’表示新的文件开始;‘2’表示返回到一个文件;‘3’表示以下文件来自系统头文件;‘4’表示下面的文件应该被包装在extern “C”块中。

 三、编译有哪些功能?

3.1 编译器功能:
⚫1、词法分析:分析关键字,标识符,立即数的合法性;
⚫2、语法分析:检查代码是否遵循C语言语法规则;
⚫3、语义分析:分析表达式是否合法;


99ce70234cb74c66828252176b3b27ed.png 5992740abc8e4280bf80700b398b85de.png

3.2 汇编:
汇编过程调用主要对汇编代码进行处理,生成处理器能识别的指令,保存在后缀名为.o的目标文件中。 

8574c67dd49c4bf5af558020b5696618.png cc01c47b0b4049d2aacc39a3040e5c93.png

5124018bb73645e686898114fcd2477f.png3.3  链接:
链接阶段的目的是将目标文件及链接库(eg:.so及.a etc)通过链接器形成可执行文件。gcc test.o -o test

4d89c23c836841a288a3f21b3a96f112.png 100c850723ab4974b92a735d85ad17d8.png

 链接:
链接阶段的目的是将目标文件及链接库(eg:.so及.a etc)通过链接器形成可执行文件。
1、普通链接:运行时,将所有的代码库.o文件,一次性拷贝到内存中,如果运行多个副本,那么相同的代码库会各自占用一部分内存,这些内存中存储的东西是一样的。
2、静态链接:出于节省内存的考虑,我们可以将相同的代码封装到静态库中,那么多个副本运行时,只加载一份静态库即可,这样相对于普通链接来说节省内存,内存消耗比动态链接多。
3、动态链接:程序运行开始的时候只加载必要的模块,当开始调用某一动态链接库时,采取寻找并加载动态链接库到内存中,节省内存但是运行效率慢。



3.3.1 静态链接:

2220f1a42499459fa0dcbf745af37253.png

3.1.2  动态链接:

bd2b2b0b0fa346d398e9e9f452960f78.png

3.4 程序编译生成可执行文件过程分为四个步骤:

f18ce228830d479f94e8ec07817b57b7.png 45935fa758c740f08da27f41b3e3a7d6.png

3.5  configure

316ccd5b2cb24983887c2bf5af2fc7b4.png10152e7695e3410caa1a7c16fbf2f1c4.png

3.6 make

9b0b6ac9fcbc40fa8eb7505c76337a56.png make的参数
下面列举了所有GNU make 3.80版的参数定义。其它版本和产商的make大同小异,不过其它产商的make的具体参数还是请参考各自的产品文档。
-C <dir>, –directory=<dir>
指定读取makefile的目录。如果有多个“-C”参数,make的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录。如:“make -C ~hchen/test -C prog”等价于“make -C ~hchen/test/prog”。
-f=<file>, –file=<file>, –makefile=<file>
指定需要执行的makefile。




4d13a7dd6408484cae49f8b1df79d9b2.png target:
可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签。

prerequisites:
生成该target所依赖的文件和/或target
command:
该target要执行的命令(任意的shell命令)
target这一个或多个的目标文件依赖于prerequisites中的文件,其生成的规则定义在command中。
prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。 




 示例

74b011f189ba4262812b203d40a22119.png

3.6.1 make是如何工作的?

makefile中使用变量 

da6e826725d74e70998c57754402029b.png 引用其他的makefile
在Makefile使用include 关键字可以把别的Makefile包含进来,被包含的文件会原模原样的放在当前文件的包含位置。include 的语法是:

310ba59fc06649b6b028cd81bf8600cd.png 65642240a0384f318dc532132bd61969.png四、GNU编译器

28943eddb52a44c4831134108137e15a.png

五、Intel编译器

3bfb85aa94e749128a9504dbaa947e7e.png六、 PGI编译器

b8fe3ddb998846c98e82d3c6a447e3b0.png 七、其它x86编译器

40749015f95841e48b08c60187590ab0.png 以编译python3为例
在官网下载源码放在家目录下

9ed4cfc95f6c41059efa9e321bb39aa4.png 下载完成后解压源代码

28f735feaf164d3880070fd1f85c9579.png 进入解压缩后的目录,如果有README或者INSTALL一类的文件可以先查看内容
一般都会有简单的安装说明,编译参数的介绍或者注意事项(比如依赖的其他软件)
另外在预编译之前可以用
./configure–help
查看编译选项的说明



5c56472844ac4a2fb093b1b40d05c8d7.png

63c8d2f2387549b3bde77e015ad732bd.png

ec0acec5cfff4a988bae002739f6fe44.png 执行make&&makeinstall
开始编译并安装编译好的文件
某些软件支持并行编译可以在make命令后面加–j参数指定编译的进程数比如make-j8

05a423f6f28948bc935b28c2ef52f0ed.png 如果编译过程中出现问题,需要根据提示进行debug
如果编译顺利完成,进入到指定的安装路径一般会有如下目录(每个软件不一样)

d1ee3016c731475699aa92a66a107e4b.png c6cb0b8ff163436d9374a962a4904c03.png

 创建环境变量文件并加载以使用新安装的软件

1a618326b0564c0e8c92ee59c3b4d102.png

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112073.html

(0)
上一篇 2026-01-20 20:33
下一篇 2026-01-20 21:01

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信