1. 什么是交叉工具链
交叉编译:我的理解,是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。
工具链:可能指编译、汇编、链接等一整套工具。
下面摘录一段:
DIY自己的GNU交叉工具链(i386-arm)
嵌入式设备由于不具备一定的处理器能力和存储空间,程序开发一般用PC来完成,然后将可执行文件下载到嵌入式系统中运行。这是目前嵌入式程序开发的不二选择——Host/target模式。但这引发了一个问题:由于Host和Target的处理器体系结构不同,我们不能直接用PC上既有的程序开发工具,必须使用跨平台开发工具,即在Host上生成能在Target上运行格式的目标文件。
与在PC上进行程序开发类似,嵌入式系统开发也需要编译器、链接器、解释程序等。本文讨论GNU跨平台开发工具链的建立,包括: ld, gas, ar, gcc, glibc.
自己建立交叉编译环境是一件很头疼的事(处理版本的依赖性, 漫长的编译过程...),如果你不想经历这样的痛苦,可以选择网上编译好了的工具链进行安装.如果你用的是Debian/Ubuntu的发行版, 推荐使用Emdebian. 如果使用uClinux, 也可安装arm-elf-tools.
关于Emdebian和arm-elf-tools的更多介绍, 情看本blog的这篇文章!
2. 什么是交叉编译,为什么要使用交叉编译
交叉编译的概念(来自网络):
简单地说,就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。
举个例子:
我们在Linux系统比如Ubuntu上编写的C程序完全可以拿到Windows系统上正常运行。
3. c语言中的编辑,编译,连接,运行分别是什么意思
1、编辑:编写代码,制作C语言的源文件。
2、编译:是由编译程序将C语言源文件转换成二进制中间文件,对文件内部的语法语义做处理,如果编译出错,无法进行后续动作。
3、链接:将编译中生成的中间文件组合成二进制可执知行文件,这一步会对文件之间的关联做检查,如果出错,将不会生成可执行文件,也就无法执行。
4、执行:运行可执行文件,这一步道是编写代码的最终目的。
(3)交叉链接和编译区别扩展阅读:
DOS命令通常分为三类:内部命令、外部命令和批处理命令。
1、内部命令:
其包含在命令解释程序COMMAND.COM中,一旦启动DOS,这些命令就被调入内存,只要在DOS系统提示符下输入这些命令,就可立即执行。
2、外部命令:
其以文件的形式存储在系统盘上,所带扩展名为COM和EXE。DOS启动时,它们并没有被调入内存,执行前必须从系统盘读进内存。因此输入外部命令时,要了解该命令是否在当前盘上,不然DOS无法找到它们。
3、批处理命令:
实际上是个文件,该文件包含多条命令,当用户键入批处理文件名时,DOS将顺序执行其中的各条命令。注意,批处理命令必须用“.BAT”作为扩展名。
C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单。
当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则就会显得十分重要。
网络-运行命令
网络-C语言
4. 编译、链接和交叉链接的区别与联系
1、链接是将目标代码与其他对象文件(例如库文件)合并成单个可执行文件的过程。在链接纳运过程中,符号解析和地址重差茄旦定向等操作被执行。
2、虚扰交叉链接是指将不同的目标文件和库文件进行链接,以生成适用于特定平台或操作系统的可执行文件。它通常用于开发跨平台应用程序。
5. 为什么要对C源程序进行编译、链接
首先要说的是C语言属于高级语言,不能直接被计算机识别而执行,所以需要一些操作来转化。。一开始是编译预处理,对宏,包含指令,编译指令等进行处理,然后是词法语法分析,将源代码翻译成中间代码(一般是汇编),接着优化代码,,然后将中间代码翻译成机器语言(目标文件),机器语言是计算机的基层语言,能被计算机直接识别。。接着链接目标文件,生成可以执行文件。。。大概就是这样。。详细的LZ可看这个总结。。http://bbs.zdnet.com.cn/thread-1614727-1-1.html
6. 请问什么是交叉编译跟本地编译有什么区别
你那个代码很可能是在pc平台上交叉编译到arm设备上的。这样你可以在pc上修改程序,然后pc上编译,最后把编译的结果下载到arm中就可以运行了。不知道你说的本地编译是什么意思,通常所说的那种本地编译就是编译的结果还是在pc上运行,如果你期望的是这个的话,可以考虑修改一下编译器的参数,查一下gcc的说明就知道哪个参数是指定交叉编译平台的,把那个参数去掉就是本地编译了。但是,需要注意的是,这样多半不能成功运行,因为交叉编译到arm上的一般是基于某种特殊的linux平台的,即使你使用了linux平台,其中可能有一些函数也会不同的。。。
7. 编译和链接的区别是什么
编译 源文件 -> 机器码
链接 机器码 -> 可执行文件
在GNU/Linux系统下:
编译: .c -> .o
链接: .o .o .o -> a.out
具体的可以看gcc的相关文档。
这个可以参考:
http://www.network-theory.co.uk/docs/gccintro/gccintro_82.html
8. VC中编译与连接有什么区别
要连接要先编译,如果没编译会连接时会自动编译。举个例子,如果你有两个文件,对一个文件进行编译只是讲这个文件编译成了目标文件.obj,但是另外一个文件没有,需对另外一个文件进行编译,可以观察结果输出框的显示,这时连接便会将两个文件连接在一起,才会将互相调用的函数等联系起来,生成.exe。如果不编译直接点连接,系统自动将两个文件编译,并连接,生成.exe文件。
假设两个文件分别是a.cpp,b.cpp,a调用b的函数:
编译a:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
然后编译b:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
b.obj - 0 error(s), 0 warning(s)
然后连接:
--------------------Configuration: a - Win32 Debug--------------------
Linking...
a.exe - 0 error(s), 0 warning(s)
假如编译一个后直接连接:
编译a:无变化
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
直接连接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
如果两个都不编译,直接点连接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
注意:假如文件没有被修改的话,编译一次后不会再进行编译了,可以直接连接,如果这时不编译,直接点连接,也只是连接,没有编译过程。
编译.h文件会提示不能编译,因为.h一般存放的是函数的声明,类的定义等,系统不会编译,但是可以在头文件中点连接进行整个程序的编译连接过程。
连接后就可以运行了,也可以在没编译、连接时点运行,系统会自动编译、连接。
9. 用C语言编的程序,要生成可执行文件的时候,要编译、链接,编译是什么意思啊链接是什么意思编译和链接
编译就是把C代码转换成CPU可执行的机器指令,每个.c文件生成一个.obj文件。
链接就是把生成的(多个) .obj 文件及用到的库文件(.lib)一起组合生成可执行文件(.exe)。
10. 请问c++问题 编译错误 与 链接错误有什么区别
编译错误是代码有错误;
链接错误是由于程序缺少必要的库文件,一般错误提示error LINK2001:无法解析的外部符号。