资讯动态

linux系统编程基础

发布时间:2026/8/6 17:30:35 来源:尧图企业网站定制
linux系统编程基础1.汇编语言(1)定义低级编程语言(直接对应计算机的二进制语言)但是是使用了更方便人类去理解的助记符MOV、ADD来表示指令(2)特点①依赖于特定的CPU架构不同架构下指令集差异较大②汇编语言可以直接硬件操作(直接对寄存器、内存地址、CPU资源进行访问)执行效率高2.gcc编译链接器Linux系统上可执行的程序的格式ELFwindows系统上可执行的程序的格式PElinux可执行的程序无后缀windows可执行的程序后缀.exe(1)gcc分布编译流程①预编译(预处理)阶段gcc -E *.c -o *.i②编译阶段gcc -S *.i -o *.s-- .s汇编语言文件③汇编阶段gcc -c *.s -o *.o-- .o二进制目标文件(linux上是.owindows上是.obj)④链接阶段gcc *.o -o *(2)多个.c文件编译例有max.c、add.c、main.cgcc -o main main.c add.c max.cmakefilemakefile自动化构建过程的工具如果有一堆.c需要编译可以使用makefile使用指令make就可以按照规定的规则完成从源代码到可执行文件的所有过程makefile使用举例vi makefileall:main#目标main:add.o max.o main.o#依赖关系gcc-omain main.o max.o add.o add.o:add.c gcc-cadd.c max.o:max.c gcc-cmax.c main.o:main.c gcc-cmain.cclear:rm-rf*.o main#清理中间文件保存退出再输入指令make即可3.gdb调试工具gdb调试工具命令行调试工具主要用于帮助开发者定位程序中的错误debug开发调试版本文件中包含调试信息release发行版本不包括调试信息gdb调试命令格式gdb 可执行文件名-- 进入调试linux系统下gcc默认生成的可执行文件是release版本例gcc 1.c -o 1 -g -- 后面加上-g可以生成debug版本windows系统下gcc默认生成的可执行文件是debug版本调试命令l显示当前代码信息b 行号给对应行打断点r运行程序n单步执行c继续执行直到断点处p 变量名打印变量的值info break查看断点信息delete 断点序号删除断点q退出gdb调试4.库文件(1)库文件预先写好的代码的集合库文件是有编译好的二进制文件的集合本质上是多个.o文件的打包归档为什么打包成库①因为不整合成库的话别人想要使用还需要将.c转成.o会有编译环境不同的问题②不希望别人知道自己的.c内容(2)库文件分类①静态库libxxx.a②动态库(共享库)libxxx.so(3)生成静态库的方式例ar crv libxxx.a max.o add.o-- 其中libxxx.a是静态库名称(4)使用静态库例gcc -o 1 main.c -L -lfool-L后面跟静态库所在的路径(相对路径、绝对路径都可以)-l后面跟静态库的名称(只需要不同的那个位置的名称即可)静态库特征即使生成后库文件被删除可执行文件依然能够执行如果将自定义的库文件移动到系统目录下那么在使用静态库生成可执行文件时不需要说明库在哪个目录下但需要说明使用的是哪个库只要不是C标准库必须使用-l说明用的什么库(5)使用动态库例gcc -shared -fPIC -o libdt.so max.o add.o-shared生成动态库的选项告诉gcc要生成动态库在链接阶段告诉编译器将.o文件链接为动态库-fPIC编译阶段用于生成位置无关代码这是动态库必备特性位置无关代码不依赖与特定的内存地址无论动态库被加载到内存的哪个位置都能正常的运行为什么需要位置无关代码动态库在程序运行时由操作系统分配内存地址而不是编译时固定地址如果代码以来固定地址加载到不同位置时会发生错误格式ldd 可执行文件名查看可执行文件使用了那些共享库使用动态库生成的可执行文件不可以直接执行两种解决方法①将共享库放置到系统目录下动态库删除后可执行文件无法执行因为动态库生成可执行文件阶段只是让可执行文件知道有动态库的存在没有将库中的函数定义一并编译进去②告诉可执行文件库就在当前目录下链接时机和过程(1)对静态库编译时链接程序编译时系统将静态库中引用的代码完整复制到可执行文件中(2)对动态库运行时链接编译阶段紧急炉对动态库的依赖关系不复制代码运行时由操作系统加载动态库再分配地址静态库动态库的区别(1)磁盘空间占用静态库占用比动态库大(2)更新和维护静态库依赖他的所有可执行文件必须重新编译才能使用新功能动态库只需要把文件替换一下不需要重新编译(3)移植性动态库移过来可以直接用静态库需要重新编译

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价