⑴ arm-linux-gcc已安装,可是编译是总是出现arm-none-linux-gnueabi-gcc:命令未找到
cc1: error: invalid option `abi=apcs-gnu'
你的交叉编译器有问题吧……
看看这个解决办法:
http://blog.sina.com.cn/s/blog_538376bd01000a2c.html
不过要我说,弄嵌入式首先要会自己做交叉编译工具,直接拿别人的,出问题只能在那里傻坐着。
其实自己编译个最新版本的交叉编译工具,我的 core 2 dou T5450 其实也就需要三个小时搞定。当然我这是全自动的,你手动半天也够了吧?
自己编译一个 gcc 4.4.2 + binutils 2.20.1 + glibc 2.11 + kernel-header 2.6.33 也不需要多麻烦吧?
至少自己编译起程序来不会出现各种 XXOO 的问题。
⑵ 编译程序的工作过程一般可以划分为哪5个基本阶段,还自始至终伴随进行哪两项工作
1、编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。
2、编译程序的工作过程一般自始至终伴随进行信息表管理和出错处理两项工作。
主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
(2)编译总是那一个扩展阅读:
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。解释程序的工作过程如下:
1、由总控程序完成初始化工作。
2、依次从源程序中取出一条语句进行语法检查,如有错,输出错误信息;如果通过了语法检查,则根据语句翻泽成相应的指令并执行它。
3、检查源程序是否已经全部解释执行完毕,如果未完成则继续解释并执行下一条语句,直到全部语句都处理完毕。
⑶ C语言编译原理是什么
编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。
⑷ 一个典型的编译程序通常由哪些部分组成各部分的主要功能是什么
通常由七个部分组成。分别是:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成以及表格和表格管理、出错处理。
各自功能是:
1.词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词(也称单词符号,或简称符号)。在词法分析阶段工作所依循的是语言的词法规则;描述词法规则的有效工具是正规式和有限自动机。
2.语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串组成各类语法单位。具体的说,语法分析是在单词流的基础上建立一个层次结构——建立语法树。
3.语义分析和中间代码生成:语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中的操作信息及类型信息;中间代码生成阶段将产生的源程序的一个显式中间表示,这种中间表示可以看成是某种抽象程序,通常是与平台无关的,(可用三地址码和四元式表示)。
4.优化:试图改进中间代码,以产生执行速度较快的机器代码。
5.目标代码生成:生成可重定位的机器代码或汇编代码。
6.表格和表格管理:编译程序在工作过程中需要保持一系列的表格,以登记源程序的各类信息和编译各阶段的进展情况。
7.出错处理:编译程序对源程序中的错误进行处理,应最大限度地发现源程序中的各种错误,准确地指出错误的性质和发生错误的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,以便进一步发现其他可能的错误。通常编译过程中每个阶段都可能检测出错误,其中,绝大多数数错误可以在编译的前三阶段检测出来。且源程序中的错误通常分为语法错误和语义错误两大类。出错处理就是为了处理以上的错误情况。
⑸ 请高手帮忙看下出的什么问题,为什么编译总是过不去,实在找不出问题在哪fatal error LNK1120: 1 unresolv
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain
从这个看出是未解决的外部符号。
就是说,你设置了_WinMain,但是没解决这个符号。
这个符号是WINDOWS程序的入口,而你的入口是main()函数,所以,你需要修改你的工程。打开Project->settings.选择Link,将最下面编辑框里面的子系统选项/subsystem:windows (Windows程序) 改成/subsystem:console (控制台程序),然后重新编译就可以了。
⑹ 我用vc++6.0编译总是提示有一个错误,我实在找不出来了,所以求助一下,可有高手帮助我
这通常是编译器路径设置有问题。
你在编译器 安装文件中 找一下 VCVARS32.BAT 批命令程序,运行一下它,看能否解决问题。
例如,在 C盘查找。在提示符 C:\> 下拍命令: dir VCVARS32.BAT /s
就会找出 它,你把它 到 你的程序 所在的文件夹,运行一次它。
接着,编译 程序,例如拍入 CL my_porg.c 即可。
⑺ C++编译时,是从哪一个cpp开始的,然后各cpp的编译顺序是如何定的
编译顺序由你在编译设置里决定
其实编译顺序并不重要
最终的连接过程是产生可执行文件的最终步骤,只要保证连接时所有的目标文件都存在就行了
比如一个小程序包括两个文件
//main.cpp
extern int a;
int main(void){
printf("%d\n",a);
a=5;
printf("%d\n",a);
}
//var.cpp
int a=2;
----
gcc -c main.cpp
gcc -c var.cpp//这两步可以换过来
gcc main.o var.o//这两个参数也可以换过来
输出
2
5
⑻ C++总是编译错误,哪位高人指点一下
21行,少一个int
for(int i=0; i<P; i++)
⑼ codeblocks为什么一个程序下的俩个文件,编译的时候总是编译另外一个
codeblocks 是按项目来的,project。
你要看下当前编译项目选择是否正确。