导航:首页 > 品牌介绍 > 编衣链的方法图解

编衣链的方法图解

发布时间:2021-06-07 03:51:57

① 交叉编译工具链制作的问题!

核心转储是崩溃报告的一个过程,他只是把当前崩溃的信息转存出来方便差错。而且这个核心转储几个字也不过是个提示输出信息。这个提示不会给与任何与错误相关的内容,必须看其他的错误信息或者他转储出来的东西来分析。
不过核心转储,应该是程序运行出错而崩溃。这种问题出现在你正在运行的程序,而不是编译过程出现的编译错误(也就是说,出现核心转储应该就是 GCC 或者他调用的程序自己崩溃了)。出现这个问题的原因很多。

如果是因为没有找到某些 header 文件,不应该是核心转储错误,而是编译器或者某个过程提示错误信息后退出,他会输出错误信息告诉你问题所在。

至于你编译的这些东西版本都比较老,我建议还是尝试降级整个系统来编译、运行你现在的这些东西。或者升级你这个交叉编译工具链到当前主流的版本来用。

至于交叉工具连当中的 GCC 和你当前本机的 GCC,完全是两个互相独立的 GCC 。
只是他们编译输出的二进制程序针对的指令集不同而已。相对的 binutils 和 glibc 和 kernel-header 都是一样的意思,针对目标而输出的相关程序。当然 glibc 和 kernel-header 主要是以“数据”方式存在,gcc 和 binutils 主要是以可以运行的程序方式存在(当然不是绝对的,比如 gcc 还会提供几个 lib 相关的内容,不过大部分情况下你可以这么理解更直观了解他们的作用)。
一般说来 GCC 是编译器,binutils 是连接器,glibc 是标准 C 库(主要是连接时,连接器必须有目标的函数库文件,也就是 .so 文件,对应 Windows 是 .dll 文件。连接器把函数调用正确的挂接到对应的函数入口上)。linux header 就是 C 语言常见的 C header 文件和相关的开发数据。一般主要用来编译 glibc ,glibc 作为中间层来提供内核相关调用。当然程序有些时候也会直接调用内核函数,这样这些程序在编译时也需要 kernel 的 header 。

这两套东西一个输出你当前 PC 的程序,一个输出 ARM 的程序。两个 GCC 套装之间不能互相替换。只能自己输出属于自己的程序。
但是这两套程序虽然输出的程序不同,但可以运行的部分,却都是在你的计算机上运行。而且你本机的 GCC 因为可以输出本机的程序。所以你需要用他来输出在你本机运行,但是却输出 ARM 程序的 GCC 套装。

这就好比两个锤子,一个锤子用来打铁,一个锤子用来打锡。用途不同,但这两个锤子都是铁做的。
你作这个交叉编译工具链,就是用你手里已经有的打铁的锤子,打出一个用铁制作的用来打锡的锤子。这个打锡的锤子是不能打铁的,同样这个打铁的锤子是不能用来打锡的。

② Linux嵌入式交叉编译工具链问题 浅谈

简介

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。有时出于减小libc库大小的考虑,也可以用别的c库来代替glibc,例如uClibc、dietlibc和newlib。交叉编译工具链主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。第一个步骤就是确定目标平台。每个目标平台都有一个明确的格式,这些信息用于在构建过程中识别要使用的不同工具的正确版本。因此,当在一个特定目标机下运行GCC时,GCC便在目录路径中查找包含该目标规范的应用程序路径。GNU的目标规范格式为CPU-PLATFORM-OS。例如,建立基于ARM平台的交叉工具链,目标平台名为arm-linux-gnu。

交叉编译工具链的制作方法

  1. 分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。

  2. 通过Crosstool脚本工具来实现一次编译生成交叉编译工具链。

  3. 直接通过网上(ftp.arm.kernel.org.uk)下载已经制作好的交叉编译工具链。

方法1相对比较困难,适合想深入学习构建交叉工具链的读者。如果只是想使用交叉工具链,建议使用方法2或方法3构建交叉工具链。方法3的优点不用多说,当然是简单省事,但与此同时该方法有一定的弊端就是局限性太大,因为毕竟是别人构建好的,也就是固定的没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名的错误,建议你慎用此方法。


方法1:分步构建交叉编译工具链


  1. 下载所需的源代码包

  2. 建立工作目录

  3. 建立环境变量

  4. 编译、安装Binutils

  5. 获取内核头文件

  6. 编译gcc的辅助编译器

  7. 编译生成glibc库

  8. 编译生成完整的gcc

由于在问答中的篇幅,我不能细述具体的步骤,兴趣的同学请自行阅读开源共创协议的《Linux from scratch》,网址是:linuxfromscratch dot org


方法2:用Crosstool工具构建交叉工具链(推荐)

Crosstool是一组脚本工具集,可构建和测试不同版本的gcc和glibc,用于那些支持glibc的体系结构。它也是一个开源项目,下载地址是kegel dot com/crosstool。用Crosstool构建交叉工具链要比上述的分步编译容易得多,并且也方便许多,对于仅仅为了工作需要构建交叉编译工具链的你,建议使用此方法。

运行which makeinfo,如果不能找见该命令,在解压texinfo-4.11.tar.bz2,进入texinfo-4.11目录,执行./configure&&make&&make install完成makeinfo工具的安装

下载所需资源文件linux-2.4.20.tar.gz、binutils-2.19.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和gdb-6.5.tar.bz2。然后将这些工具包文件放在新建的$HOME/downloads目录下,最后在$HOME/目录下解压crosstool-0.43.tar.gz,命

令如下:
#cd$HOME/
#tar–xvzfcrosstool-0.43.tar.gz

接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模板,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:

# cd crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改后的arm.sh脚本内容如下:

#!/bin/sh
set-ex
TARBALLS_DIR=$HOME/downloads#定义工具链源码所存放位置。
RESULT_TOP=$HOME/arm-bin#定义工具链的安装目录
exportTARBALLS_DIRRESULT_TOP
GCC_LANGUAGES="c,c++"#定义支持C,C++语言
exportGCC_LANGUAGES
#创建/opt/crosstool目录
mkdir-p$RESULT_TOP
#编译工具链,该过程需要数小时完成。
eval'catarm.datgcc-3.3.6-glibc-2.3.2.dat'shall.sh--notest
echoDone.

在arm.sh脚本文件中需要注意arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中arm.dat文件内容如下,主要用于定义配置文件、定义生成编译工具链的名称以及定义编译选项等。

KERNELCONFIG='pwd'/arm.config#内核的配置
TARGET=arm-linux#编译生成的工具链名称
TARGET_CFLAGS="-O"#编译选项


gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。

BINUTILS_DIR=binutils-2.19
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根据实际情况填写)
GDB_DIR=gdb-6.5

将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。具体执行命令如下:

#cdcrosstool-0.43
#./arm.sh

经过数小时的漫长编译之后,会在/opt/crosstool目录下生成新的交叉编译工具,其中包括以下内容:

arm-linux-addr2linearm-linux-g++arm-linux-ldarm-linux-size
arm-linux-ararm-linux-gccarm-linux-nmarm-linux-strings
arm-linux-asarm-linux-gcc-3.3.6arm-linux-objarm-linux-strip
arm-linux-c++arm-linux-gccbugarm-linux-objmpfix-embedded-paths
arm-linux-c++filtarm-linux-gcovarm-linux-ranlib
arm-linux-cpparm-linux-gprofarm-linux-readelf

然后将生成的编译工具链路径添加到环境变量PATH上去,添加的方法是在系统/etc/ bashrc文件的最后添加下面一行,在bashrc文件中添加环境变量

export PATH=/home/jiabing/gcc-3.3.6-glibc-2.3.2/arm-linux-bin/bin:$PATH

至此,arm-linux下的交叉编译工具链已经完成,现在就可以使用arm-linux-gcc来生成试验箱上的程序了!












③ 汇编语言的那个编译链接 的详细过程 每一步骤

16位汇编:安装MASM5.0编译器,假设将编译器MASM5.0文件放在c:\下,在DOS下进入c
:\MASM5.0目录下,输入命令masm,回车,出现"【.ASM】"会提示输入源文件所在文件目录及以.asm为后缀的文件名,回车,出现"【.obj】"会提示输入目标文件名,然后回车直到结束。
然后输入link命令,出现【.obj】会提示输入目标文件,回车,会出现"【.exe】"提示输入可执行文件,回车知道结束。然后输入可执行文件名,就可以运行程序了。

④ 高级语言的编译过程,经过哪几个步骤

开发C程序有四个步骤:编辑、编译、连接和运行。

任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。

1、预处理:导入源程序并保存(C文件)。

2、编译:将源程序转换为目标文件(Obj文件)。

3、链接:将目标文件生成为可执行文件(EXE文件)。

4、运行:执行,获取运行结果的EXE文件。

(4)编衣链的方法图解扩展阅读:

将C语言代码分为程序的几个阶段:

1、首先,对源代码文件进行测试。以及相关的头文件,比如Stdio。H.CPP预处理为。我的文件。预编译。该文件不包含任何宏定义,因为所有宏都已展开,且包含的文件已插入。我提起。

2、编译过程是对预处理后的文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程通常是整个程序的核心部分,也是最复杂的过程之一。

3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可运行的可执行程序。也就是说,您需要链接到大量文件以获得最终可执行文件“a.out”。

4、在链接过程中,其他目标文件中定义的函数调用指令需要重新调整,而其他目标文件中定义的变量也存在同样的问题。

如何更改ubuntu中交叉编译工具链

1.下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,我把它下载到了我的个人文件夹里 /home/wrq
2. 解压 arm-linux-gcc-3.4.1.tar.bz2

#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下
# cd usr/local/
#cp -rv arm /usr/local/
现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了
3. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)
方法一:修改/etc/bash.bashrc文件
#vim /etc/bash.bashrc
在最后加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH
方法二:修改/etc/profile文件:
# vim /etc/profile
增加路径设置,在末尾添加如下,保存/etc/profil文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
4. 立即使新的环境变量生效,不用重启电脑:
对应方法一:#source /root/.bashrc
对应方法二:# source /etc/profile
5. 检查是否将路径加入到PATH:
# echo $PATH
显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交
叉编译环境安装完成。
6. 测试是否安装成功
# arm-linux-gcc -v
上面的命令会显示arm-linux-gcc信息和版本,显示的信息:
Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-
3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu
--prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm
-linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable
-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-
languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
7.编译
Hello World程序,测试交叉工具链
写下下面的Hello World程序,保存为
hello.c
#include
int main()
{
printf("Hello World!\n");
return 0;
}
执行下面的命令:
# arm-linux-gcc -o hello hello.c
源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了!接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。

⑥ 编译原理 什么是静态链

1、路由器的工作原理
路由工作简单原理图
在这里插入图片描述
1)主机1.1要发生数据包给主机4.1.因为IP地址不在同一网段,所以主机会将数据包发送给本网段的网关路由器。
2)路由器A 接收到数据包,先查看数据包IP首部中的目标IP地址。再查找自己的路由表。数据包的目标IP地址是4.1.属于4.0网段,路由器A 在路由表中查到4.0网段转发的接口是S0接口,于是路由器A将数据从S0接口转发出去。
3)网络中的每个路由器都是按照这样的步骤转发数据的,直到到达路由器B,再用同样的方法从E0接口转发出去,最后主机4.1接收到这个数据包。
2、路由表
(1)概念
路由器中维护的路由条目的集合。
路由器根据路由表做的路径选择。
(2)路由表的形成
1)直连网段
配置IP地址,端口UP 状态,形成直连路由。
2)非直连网段
需要静态路由或动态路由,将网段添加到路由表中。
3、静态路由
由管理员手工配置的,是单向的。缺乏灵活性。
管理员可以通过静态路由来控制数据包在网络中的流动。
4、默认路由
一种特殊的静态路由,当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口。
当默认路由存在末梢网络时,默认路由会大大简化路由器的配置。
5、路由器转发数据包的分装过程
HostA向HostB发送数据
在这里插入图片描述
1)HostA在网络层将上层的报文封装成IP数据包,其首部包含源地址和目的地址。源地址即本机IP地址192.168.1.2,目的地在为HostB的IP地址192.168.2.2,HostA使用本机配置的24位掩码于目的地址进行“与”运算,得出目的地在与本机地址不在同一网段,因此发往HostB的数据包需要经过网关路由器A转发。
2)HostA通过ARP请求获得默认网关路由器A 的E0接口MAC 地址00-11-12-21-22-22.在数据链路层HostA将IP数据包封装成以太网数据帧,在以太网首部的源MAC地址为00-11-12-21-11-11,目的MAC地址为网关E0接口的MAC地址00-11-12-21-22-22
3)路由器A从E0接口接收到数据帧,把数据链路层的封装去掉。路由器A认为这个IP数据包是要通过自己进行路由转发,所以路由器A会自己查找自己的路由表,寻找与目标IP地址192.168.2.2相匹配的路由表项,然后根据路由表的下一跳地址将数据包转发到E1接口。
4)在E1接口路由器A 重新封装以太网帧,此时源MAC地址为路由器A的E1接口MAC地址00-11-12-21-33-33,目的MAC地址为与之相连的路由器B的E1接口MAC地址00-11-12-21-44-44
5)路由器B从E1接口接收到数据帧,同样会吧数据链路层的封装去掉。对目的IP地址进行检查,并与路由表进行匹配,然后根据路由表的下一跳信息将数据包转发到E0接口。路由器B发现目的网段与自己的E0接口相连,通过ARP广播,路由器B获得HostB以太口的MAC地址00-11-12-21-66-66.路由器B在将IP数据包封装成以太网帧,源MAC地址为路由器B的E0接口的MAC地址00-11-12-21-55-55,目的MAC地址为HostB的MAC地址00-11-12-21-66-66.封装完毕,将以太网帧从E0接口发往HostB.

⑦ Linux安装uclibc交叉编译工具链的步骤如要将原先的glibc卸载吗

……肯定不能卸载原来的glibc,卸了之后整个系统都不能用了
你要编译的uclibc是linux->arm的和arm->arm的,glibc是给linux->linux用的

⑧ 汇编新手求助,masm32 自带的编译器qeditor怎么用,求详细步骤。 怎么新建文件到编译,执行。

这个编辑器比较难用。不推荐用。我们只用它包含的库文件。
你可以用用RadAsm作为编辑器 。

⑨ 交叉编译工具链的建立

1、安装vmware tools 使用文件夹共享
2、添加硬件(硬盘)直接挂载
3、放到u盘中
4、ssh stfp 传输

⑩ ubuntu怎么安装交叉编译工具链

. 解压 arm-linux-gcc-3.4.1.tar.bz2
#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2

解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下

# cd usr/local/

#cp -rv arm /usr/local/

现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了

3. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)

方法一:修改/etc/bash.bashrc文件

#vim /etc/bash.bashrc

在最后加上:

export PATH=$PATH:/usr/local/arm/3.4.1/bin

export PATH

与编衣链的方法图解相关的资料

热点内容
哈萨克族帽子怎么戴 浏览:286
羽绒棉服和羽绒服有什么区别 浏览:444
哈尔滨防雪风衣多少钱 浏览:473
浦东文华东方礼宾制服 浏览:370
陌陌主播马甲怎么换 浏览:435
日本水手服是校服吗 浏览:544
dme羽绒服好不好 浏览:721
宝宝连体睡衣的做法 浏览:869
校服捐赠倡议书 浏览:584
淘宝女装取标题 浏览:844
戴军训帽子怎么不压刘海 浏览:988
红色裤子绿色上衣好看图片 浏览:943
绿色的衣服配什么裤子男 浏览:271
动车乘务员的制服有什么不同 浏览:429
颗粒绒外套羊皮里子如何清洗 浏览:519
衣上的塑料钻石掉了怎么办 浏览:235
欧斓雅女装是品牌吗 浏览:902
粉色外套配紫色颜色衣服好看 浏览:195
昌平什么地方专买旗袍妈妈妈婚礼 浏览:308
男明星男士内裤 浏览:906