当前位置: 首页 > news >正文

免费看电视剧的网站2021网站建设坂田

免费看电视剧的网站2021,网站建设坂田,佛山网站建设原创,临沂最新消息什么是交叉编译#xff1f;交叉编译是一个行为#xff0c;是在一个平台上生成另一个平台上的可执行代码。 本地编译#xff1a;本地编译可以理解为#xff0c;在当前编译平台下#xff0c;编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发#xff0c;都是…什么是交叉编译交叉编译是一个行为是在一个平台上生成另一个平台上的可执行代码。 本地编译本地编译可以理解为在当前编译平台下编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发都是属于本地编译比如我们在 x86 平台上编写程序并编译成可执行程序。这种方式下我们使用 x86 平台上的工具开发针对 x86 平台本身的可执行程序这个编译过程称为本地编译。交叉编译交叉编译可以理解为在当前编译平台下编译出来的程序能运行在体系结构不同的另一种目标平台上但是编译平台本身却不能运行该程序比如我们在 x86 平台上编写程序并编译成能运行在 ARM 平台的程序编译得到的程序在 x86 平台上是不能运行的必须放到 ARM 平台上才能运行。宿主机host 编辑和编译程序的平台一般是基于X86的PC机通常也被称为主机。目标机target用户开发的系统通常都是非X86平台。host编译得到的可执行代码在target上运行。prefix交叉编译器的安装位置。比如我们在windows上面编写51和32的代码并编译成可执行代码如xx.hex,是在C51上面运行不是在windows上面运行交叉编译的发生在keil集成环境上面。同样我们在ubuntulinux上面编写树莓派的代码并编译成可执行代码如xx.out,是在树莓派上面运行不是在ubuntulinux上面运行。 为什么要交叉编译 有时是因为目的平台上不允许或不能够安装我们所需要的编译器而我们又需要这个编译器的某些特征 有时是因为目的平台上的资源贫乏无法运行我们所需要编译器 有时又是因为目的平台还没有建立连操作系统都没有根本谈不上运行什么编译器。 在项目的起始阶段目的平台尚未建立因此需要做交叉编译以生成我们所需要的bootloader启动引导代码以及操作系统核心 其次当目的平台能启动之后由于目的平台上资源的限制当我们编译大型程序时依然可能需要用到交叉编译。 Speed 目标平台的运行速度往往比主机慢得多许多专用的嵌入式硬件被设计为低成本和低功耗没有太高的性能 Capability 整个编译过程是非常消耗资源的嵌入式系统往往没有足够的内存或磁盘空间 Availability 即使目标平台资源很充足可以本地编译但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得 Flexibility 一个完整的Linux编译环境需要很多支持包交叉编译使我们不需要花时间将各种支持包移植到目标板上 交叉编译工具链交叉编译器是什么一般由编译器、连接器、解释器和调试器组成就是为了编译、链接、处理和调试跨平台体系结构的程序代码。 要进行交叉编译我们需要在主机平台上安装对应的交叉编译工具链cross compilation tool chain然后用这个交叉编译工具链编译我们的源代码最终生成可在目标平台上运行的代码。常见的交叉编译例子如下 在Windows PC上利用ADSARM开发环境使用armcc编译器则可编译出针对ARM CPU的可执行代码在Linux PC上利用arm-linux-gcc编译器可编译出针对Linux ARM平台的可执行代码在Windows PC上利用cygwin环境运行arm-elf-gcc编译器可编译出针对ARM CPU的可执行代码树莓派有flash和运行内存RAM随机存储器但是树莓派有时因为目标平台没有建立连操作系统都没有根本谈不上编译器。因此需要做交叉编译以生成平台至少所需要的bootloader启动引导代码 以及 操作系统核心 交叉编译工具链的安装 不同的平台用的交叉比编译器不同就像我们在用keil编译51的代码时要选择对应的芯片编译32的代码时也要选择对应的芯片这其实都是在间接地选择了编译器。如果目标机是树莓派那么我们将会用到树莓派的交叉编译工具链。 首先下载树莓派的交叉编译工具链下载地址点这里点击download下载即可。 交叉编译工具链的安装有两种方法①临时有效 ②永久有效 临时有效将路径加入PATH环境变量将命令加入终端使命令使用更加方便不用敲很长的路径echo $PATH 显示当下的环境变量然后使用指令export PATH设置新的环境变量 永久有效vi .bashrc打开工作目录下的.bashrc 隐藏文件用来配置命令终端的每次启动终端都会执行这个脚本。将上面的配置命令添加在这个文件的最后一行即可。然后source /home/CLC/.bashrc使用这个指令是设置立即生效 下面记录在ubuntu上面安装树莓派的交叉编译工具首先在上方的那个网址下载交叉编译工具到与虚拟机共享的文件夹然后将压缩包拷贝到虚拟机使用指令cp /mnt/hgfs/Sharefromwindows/tools-master.zip . 然后使用指令进行解压unzip tools-master.zip解压完成后会出现tool-master这个文件夹进入这个文件夹可以看到arm-bcm2708,所需要的交叉编译工具就是在这里进入这个文件夹gcc-linaro-arm-linux-gnueabihf-raspbian-x64因为我的虚拟机宿主机是64位的所以选择这个文件夹如果是32位的用gcc-linaro-arm-linux-gnueabihf-raspbian这个文件夹夹里面的。进入自己对应的文件夹然后进入bin目录下可以看到很多绿色的可执行文件 我们要用的交叉编译工具就是浅蓝色的那个软连接相当于windows下面的快捷方式arm-linux-gnueabihf-gcc可以使用指令./arm-linux-gnueabihf-gcc -v查看交叉编译1器的版本相关信息和查看gcc版本的指令类似gcc -v 在ubuntu里面编译一个可执行代码可以通过file testone来查看文件的属性如下图所示x86-64 表示只能运行在64位的X86的机子上这样在可执行程序就不能在树莓派上面跑。 如果想要在树莓派上面运行就要使用指令编译arm-linux-gnueabihf-gcc testone.c -o testone这样生成的testone就可以在ARM平台上面运行。 可以使用指令scp testone pi192.168.43.136:/home/pitestone是要移动到树莓派的可执行文件192.168.43.136是树莓派的ip地址冒号后面是将文件放到树莓派的哪一个位置。可以看到绿色的可执行文件testone然后可执行。 如果将一个只能在x86运行的代码移动到树莓派上面则会报错-bash: ./testone: cannot execute binary file: Exec format error表示不能解析这个二进制文件。同样我们可以将项目二代码的服务端移到树莓派上面运行客户端在虚拟机上面运行。 客户端 服务端 带WiringPi库的代码如何在上位机进行交叉编译 需要先在宿主机上面这里是ubuntu安装wiringPi库 wiringPi库百度网盘链接https://pan.baidu.com/s/1cPIt-xZLye1DAQjq2yKzeg提取码35vt 进入解压后的WiringPi文件夹然后打开INSTALL这个文件夹查看如何下载这里显示直接执行build文件即可编译wiringPi库生成动态库编译时需要链接但是它是使用的gcc编译器编译出来库是只能运行在x86平台上的然后将会下载到/usr/local/lib这个目录下然后可以使用指令arm-linux-gnueabihf-gcc demo.c -I /home/fhn/wringPi/WiringPi/wiringPi -lwiringPi但是会发现报错是因为链接wiringPi库的时候是链的/usr/local/lib这个目录下的libwiringPi.so 但是file libwiringPi.so去查看这个文件的属性发现这个文件的属性是在x86上面运行的然而我们需要在ARM上面运行所以是不兼容的会报错/home/fhn/arm-tool/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi collect2: error: ld returned 1 exit status 正常情况下我们先要交叉编译wiringPi库编译出适合树莓派的库这时候交叉编译可执行程序的时候链接库的格式也是正确的。那么我们可以将树莓派的wiringPi库拿到虚拟机libwiringPi.so就这个动态库但是这是个软连接相当于快捷方式 使用指令ls -l |grep libwiringPi.so可以看出这个文件是指向libwiringPi.so.2.50这个动态库的。所以我们需要将这个动态库发送到ubuntu里面使用指令scp libwiringPi.so.2.50 fhn192.168.43.112:/home/fhn/wringPi/WiringPi就算将软连接发送到ubuntu也不会指向这个动态库还需要我们自己创建动态库。如果传输过程中出现错误ssh: connect to host 192.168.43.112 port 22: Connection refused lost connection表示ubuntu没有安装ssh在ubuntu里面下载ssh即可sudo apt-get install ssh 使用指令ln -s libwiringPi.so.2.50 libwiringPi.so 创建软连接下面有详细的讲解软硬链接创建软连接后使用指令arm-linux-gnueabihf-gcc hc.c -I /home/fhn/wringPi/WiringPi/wiringPi -L . -lwiringPi -o hc进行编译其中-I /home/fhn/wringPi/WiringPi/wiringPi是链接的wiringPi库的头文件-L是指定动态库在当前目录下去查找库文件。 学习指令grep gcc * -nir在所有文件里面查找gcc字眼n表示显示行号、i表示不区分大小写、n表示递归查找、*表示在所有文件里面去查找。 硬盘 在介绍硬链接和软链接之前首先介绍下硬盘相关的知识主要是了解下 inode 。 硬盘设备是由大量的扇区组成的。以 MBR 分区为例。每个扇区的容量为 512 字节。其中第一个扇区最重要。它里面保存着主引导记录与分区表信息。就第一个扇区来讲主引导记录需要占用 446 字节分区表为 64 字节结束符占用 2 字节。其中分区表每记录一个分区信息就需要 16 字节这样一来最多就只有4个分区信息可以写到第一扇区中这4个分区就是4个主分区。 第一个扇区最多只能创建出4个分区 ? 为了解决分区个数不够的问题可以将第一个扇区的分区表中16个字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另一个分区。 也就是说扩展分区并不是一个真正的分区而像是有一个占用 16 字节的分区表空间的指针一个指向另外一个分区的指针。这样一来用户一般会选择使用3个主分区1个扩展分区的方法然后在扩展分区中创建无数个逻辑分区从而来满足多分区(大于4个)的需求。 Linux 系统中有一个名为 superblock 的 “硬盘地图”。 Linux 并不是把文件内容直接写入到 superblock 中而是在里面记录着整个文件系统的信息。Linux 把每个文件的权限与属性记录在 inode(索引节点index node ) 中而且每个文件占用一个独立的 inode 表格该表格的默认大小为 128 字节。里面记录着如下信息 文件的访问权限(read、write、execute)、该文件的所有者与所属组(owner、group)、该文件的大小(size)、该文件的创建或内容修改时间(ctime)、该文件的最后一次访问时间(atime)、该文件的修改时间(mtime)、文件的特殊权限(SUID、SGID、SBIT)、该文件的真实数据地址(point) 在 Linux 系统中 inode 号才是文件的唯一标识而非文件名。文件名只是为了方便人们的记忆和适用。 如上述命令 “ls -li” 结果中的第一列就是文件的 inode 号。系统是通过 inode 号寻找正确的文件数据块。 文件的实际内容则保存在 block 中(大小可以是 1KB、2KB 或 4KB)一个 inode 的默认大小为 128KB (在 Ext3 文件系统中),记录一个 block 则消耗 4B 。当文件的 inode 被写满后Linux 系统会自动分配出一个 Block 块专门用于像 innode 那样记录其他 block 块的信息这样能把各个 block 块的内容串到一起就能够让用户读到完整的文件内容了。 对于存储文件内容的的 Block 块有以下两种常见情况以 4KB 的 block 大小为例说明情况 : 文件很小(1KB) , 但依然会占用一个 block 因此会潜在占用 3kb。 文件很大(5kb) 那么会占用两个 block。 总结 superBlock : 存储整个文件系统的信息。inode : 存储文件的权限与属性。data block : 真正存储文件内容。 软硬连接 在 Windows 系统中快捷方式是指向原始文件的一个链接文件。可以让用户从不同的位置来访问原始的文件原文件一旦被删除或剪切到其他地方后会导致链接文件失效。但是在 Linux 系统中快捷方式就不太一样 在 Linux 系统存在硬链接和软链接两种文件。 硬链接(hard link) 可以将它理解为一个 “指向原始文件 inode储存原始文件信息 的指针”系统不为它分配独立的 inode 和 文件。所以硬链接文件与原始文件其实是同一个文件只是名字不同。我们每添加一个硬链接该文件的 innode 连接数就会增加 1 而且只有当该文件的 inode 连接数为 0 时才算彻底将它删除。因此即便删除原始文件依然可以通过硬链接文件来访问。需要注意的是我们不能跨分区对文件进行链接。可以使用指令ln fileName newFileName为原文件fileName 创建硬链接newFileName软链接(symbolic link) 等同于 Windows 系统下的快捷方式。仅仅包括所含链接文件的路径名字。因此能链接目录也能跨文件系统链接。但是当删除原始文件后链接文件也将失效。总结硬链接是指向原始文件 inode的指针而软连接则是仅仅包括所含链接文件的路径名字 ln - 新建链接ln 用于创建软或硬链接。 软链接示例 :ln -s helloWorld sHelloWorld硬链接示例 ln helloWorld hardHelloWorld 问题 硬链接占据空间吗 比如我有一个 1G 的文件现在我给这个文件建了一个硬链接。那么会占据 2G 空间吗? 不会之前我们说了硬链接是一个指针或者说是文件的引用只占一点点空间软连接不占用磁盘空间。 软硬连接参考博文、交叉编译参考博文、软硬连接精彩博文、交叉编译工具链下载的另一种方法
http://www.pierceye.com/news/770766/

相关文章:

  • 网站建设中 目录怎么做更好wordpress最好用的虚拟主机
  • 网站百度网盘南京市建设局网站
  • 让别人做网站多久开始注册域名公司注册地址提供
  • 手机网站 设计趋势建设银行暑期招聘网站
  • 兰山做网站专业深圳网站定制开发
  • 做与食品安全有关的网站徐州企业网站设计
  • 番禺网站建设策划江阴市建设局官网站
  • 建设网站模块需要哪些内容石家庄城乡建设厅网站
  • 公司网站后台管理网络公司名字大全三字
  • 广西住房建设厅网站广州seo工作
  • 做分销商城网站的wordpress 知更鸟 网格
  • 推销商务网站的途径有哪些爱网站查询挖掘工具
  • 苏州现代建设公司网站备案的域名做电影网站
  • 长沙seo网站优化公司wordpress5.1下载
  • 七星彩网投网站建设鹤壁公司做网站
  • 多语言企业网站建设费用怎么自己做购物网站
  • 中国网站排名前100线上网站开发相关书籍
  • 网站制作图书网站建设指南
  • 网站备案简单吗优化关键词排名软件
  • 泉山网站开发安徽建设工程造价信息网
  • 如何使用电子商务网站做seo需要用到什么软件
  • 新乡商城网站建设哪家专业潮汕学院网站开发
  • 西安响应式网站开发网站空间多少钱一年
  • 做电子相册的大网站怎样提高网站的权重
  • seo网站设计外包去哪个网站有客户找做标书的
  • 微商招商网站源码互联网营销推广方案
  • 深圳做网站服务公司河北石家庄最新新闻
  • 山东济南seo整站优化唐山网站建设那家性价比高
  • c 可以做哪些网站小说网站建设采集
  • 公司网站备案条件高校网站集群平台子站开发