2020-03-16

嵌入式Linux的开发工具-vim、gcc、gdb、make
vim(文本编辑器):学会使用和如何配置vimgcc(编辑器):学会制作动态库和静态库及使用和区别;gdb(调试器):设置断点、单步执行、调试内存错误;make(工程管理器):编写makefile文件;Linux文本编辑器:vim–功能最强大文本编辑器—摆脱鼠标vi–vim–gvim:命令模式(nyy\p\ndd\u)、插入模式(i\a)、底行模式(shift+:)如何配置vim?etc\vim\vimrcIDE(集成开发环境):vscode编译器:gcc (GNU cc)1、gcc特点(GNU工具、交叉编译器)什么是交叉编译器?源文件到可执行文件需要经历哪几个步骤?预处理、编译、汇编、连接(PC:x86)hello.c gcc hello.c a.out./a.out–>Linux手机(ARM)交叉编译:在当前CPU平台下编译出在其他CPU平台下可执行的代码在这里插入图片描述预处理:头文件展开、宏替换、条件编译-E -I -D编译:将预处理文件编译成汇编文件.s -S汇编:将汇编文件编译生成目标文件.o -C连接:建立符号表–可执行文件a.out-o 重命名可执行文件<>:搜索路径在系统头文件目录(usr/include)" ":搜索路径先在当前目录查找,找不到再到系统的头文件目录查找。一、gcc常用编译选项:-E -S -c -o -I -D-Wall -w-O1 -O2 -O3二、静态库.a和动态库的制作.so1、什么库文件?保存函数和变量(仓库)特点:保存的函数与变量,只能使用但不能看到其实现。2、Linux库文件:静态库:在编译阶段加载;(将库文件的代码加载到源文件)动态库:在运行时加载;生成的可执行文件存在区别(优缺点)1)使用静态库生成的可执行文件大于动态库生成的可执行文件(程序运行占用内存较多)2)使用静态库生成的可执行文件难以升级;使用动态库生成的可执行文件易于升级;3)使用静态库生成的可执行文件运行速度快;使用动态库生成的可执行文件运行速度慢;4)使用静态库可执行文件里的代码容易部署;使用动态库可执行文件里的代码难以部署;3、Linux库文件存放路径:/lib:存放的系统运行所需要的库;/usr/lib:存放的是程序运行所需要的库;如何制作静态库?1、将需要保存的函数所在的文件编译生成目标文件 gcc -c add.c—>add.o2、静态库的制作工具:arar rcs(不存在就创建,存在就更新) 库名 目标文件名ar rcs libadd.a add.o3、使用gcc 源文件 -l库名 -L库存放的路径gcc main.c -ladd -L -o add如何制作动态库?gcc -shared -fPIC 源文件 -o libcal.sogcc -shared -fPIC add.c sub.c -o libcal.so使用:cp libcal.so/usr/libgcc main.c -lcalgcc main.c./libcal.so -o cal

gcc提供了一个-static参数,可以改变gcc默认的连接方式
指定了这个-static选项,gcc在连接时对项目所有的依赖库都尝试去搜索名为lib.a的静态库文件,完成静态连接,如果找不到就报错了。这里指的所有是不仅指我们常用的第三方库比如jpeg,png,opencv,zlib,…,还包括gcc编译器自带的库libgcc,libstdc++,libc,libm…,总之就是linux kernal之外的所有库。而且还要包括所有被间接引用的第三方库,比如png这个库在编译时还用到了zlib,那么静态连接png的时候,就要带上zlib的库:-lpng -lz,这可麻烦大了,要把这些东西全静态连接,这得有多大?呵呵,这事儿我干过,十几兆字节总是有的,取决你的程序用到多少第三方库。这种全静态连接有啥用处呢?也有用,就是你的程序自带干粮,只需要一个linux kernal就能跑了。但是实际应用中,我们绝大多数应用场景不需要这么做,即使在嵌入式系统中也不一定必要,尤其是嵌入式系统的存储容量受限,这么一只大象装都装不下。所以我们大多数情况下需要有选择的进行静态编译,-static并不适合。如何有选择的进行静态编译呢?最简单的方式直接在连接参数中以全路径指定连接库就好了: your/path/lib.a但这种形式对管理结构简单而且自己写Makefile的小型项目还好,当一个项目结构复杂,有时需要静态连接有时需要动态连接,这种频繁的修改编译脚本的方式,可维护性就太差了。-Bstaticgnu的连接程序ld提供了一个-Bstatic选项用于对指定的库静态连接,大意就是-Bstatic参数指定对跟在它后面的所有库执行静态连接,如下就指定LDFLAGS对png这个库静态连接,ld会自动去搜索libpng.a-Bstatic -lpng -lz-l:filename-l:filename格式指定一个文件名,连接程序直接去找这个文件名了,不会再像使用-lname时将name扩展成lib.a格式的文件名.所以使用 -l:libpng.a这样的形式来指定连接库,就指定了静态连接png库。当然如果库的位置不在gcc默认搜索路径中,要用-L参数另外指定搜索库的路径,否则连接程序不知道该从哪里找到filename。-L/your/library/path -l:libmylib.a当gcc -static 用于编译一个程序时,会使此程序静态编译(把动态库的函数和所依赖的任何的东西,都编译进本程序),编译好后,文件会非常大,但是,运行时就不需要依赖任何动态库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值