㈠ C语言源程序到运行程序经过哪几个步骤
1、预处理
在这一阶段,源码中的所有预处理语句得到处理,例如:#include语句所包含的文件内容替换掉语句本身,所有已定义的宏被展开。
根据#ifdef,#if等语句的条件是否成立取舍相应的部分,预处理之后源码中不再包含任何预处理语句。
GCC预处理阶段可以生成.i的文件,通过选项-E可以使编译器在预处理结束时就停止编译。例如:gcc -E -o hello.i hello.c
2、编译
这一阶段,编译器对源码进行词法分析、语法分析、优化等操作,最后生成汇编代码。这是整个过程中最重要的一步,因此也常把整个过程称为编译。
可以通过选项-S使GCC在进行完编译后停止,生成.s的汇编程序。例如:gcc -S -o hello.s hello.c
3、汇编
这一阶段使用汇编器对汇编代码进行处理,生成机器语言代码,保存在后缀为.o的目标文件中。
当程序由多个代码文件构成时,每个文件都要先完成汇编工作,生成.o目标文件后,才能进入下一步的链接工作。
目标文件已经是最终程序的某一部分了,只是在链接之前还不能执行。可以通过-c选项生成目标文件:gcc -c -o hello.o hello.c
4、链接
经过汇编以后的机器代码还不能直接运行。为了使操作系统能够正确加载可执行文件,文件中必须包含固定格式的信息头,还必须与系统提供的启动代码链接起来才能正常运行,这些工作都是由链接器来完成的。gcc -o hello hello.c
5、运行:执行.EXE文件,得到运行结果。
㈡ Linux中源码编译安装程序包括哪些基本步骤
第一步:创建编译脚本
进入到源码目录 执行 ./configure --prefix=/.../.....(--prefix=后面是想要安装到的目录)
第二部:编译
执行 make
第三部:安装
执行 make install
当然上面这几部都是最基本的步骤,如果想优化编译,要在./configure 后面加参数,或者configure之后手动修改Makefile文件 如O2(优化等级) FLAGS 等编译参数的修改。
--------------------------------------------------------------------------------------------------------------
以上都是源码包的编译
如果是自己写的C代码 直接 用gcc编译即可。
例如 编译test.c
执行 gcc -o test test.c即可将test.c编译为可执行的文件 test
自己打出来的 要采纳啊!
㈢ 绠杩瘾ndroid婧愪唬镰佺殑缂栬疟杩囩▼
缂栬疟android婧愪唬镰佹槸涓涓鐩稿瑰嶆潅镄勮繃绋嬶纴娑夊强澶氢釜姝ラゅ拰宸ュ叿銆备笅闱㈡垜灏嗛栧厛绠瑕佹傛嫭缂栬疟杩囩▼锛岀劧钖庤︾粏瑙i喷姣忎釜姝ラゃ
绠瑕
Android婧愪唬镰佺殑缂栬疟杩囩▼涓昏佸寘𨰾銮峰彇婧愪唬镰併佽剧疆缂栬疟鐜澧冦侀夋嫨缂栬疟鐩镙囥佸紑濮嬬紪璇戜互鍙婂勭悊缂栬疟缁撴灉绛夋ラゃ
1. 銮峰彇婧愪唬镰侊细缂栬疟Android婧愪唬镰佺殑绗涓姝ユ槸浠庡畼鏂规笭阆撹幏鍙栨簮浠g爜銆傞氩父锛岃繖鍙浠ラ氲繃浣跨敤Git宸ュ叿浠峣ndroid Open Source Project锛圆OSP锛夌殑瀹樻柟浠揿簱鍏嬮殕浠g爜𨱒ュ畬鎴愩傚懡浠ょず渚嬶细`git clone https://android.googlesource.com/platform/manifest`銆
2. 璁剧疆缂栬疟鐜澧冿细鍦ㄧ紪璇戜箣鍓嶏纴闇瑕侀厤缃钖堥傜殑缂栬疟鐜澧冦傝繖阃氩父娑夊强瀹夎呯壒瀹氱殑镎崭綔绯荤粺锛埚俇buntu镄勬煇浜涚増链锛夛纴瀹夎呭繀瑕佺殑渚濊禆椤癸纸濡侸ava寮鍙戝伐鍏峰寘鍜孉ndroid Debug Bridge锛夛纴浠ュ强閰岖疆鐗瑰畾镄勭幆澧冨彉閲忕瓑銆
3. 阃夋嫨缂栬疟鐩镙囷细Android鏀鎸佸氱嶈惧囧拰閰岖疆锛屽洜姝ょ紪璇戞椂闇瑕佹寚瀹氱洰镙囥傝繖鍙浠ラ氲繃阃夋嫨鐗瑰畾镄勮惧囬厤缃鏂囦欢锛埚傞拡瀵笔ixel镓嬫満镄刞aosp_arm64-eng`锛夋垨浣跨敤阃氱敤閰岖疆𨱒ュ畬鎴愩傞夋嫨鐩镙囧悗锛岀紪璇戠郴缁熷皢鐭ラ亾闇瑕佹瀯寤哄摢浜涚粍浠跺拰鍙樼嶃
4. 寮濮嬬紪璇戯细璁剧疆濂界幆澧冨苟阃夋嫨浜嗙紪璇戠洰镙囧悗锛屽氨鍙浠ュ紑濮嬬紪璇戣繃绋嬩简銆傚湪婧愪唬镰佺殑镙圭洰褰曚笅锛屽彲浠ヤ娇鐢ㄥ懡浠`make -jN`𨱒ュ惎锷ㄧ紪璇戯纴鍏朵腑`N`阃氩父璁剧疆涓虹郴缁熸牳蹇冩暟镄1锝2鍊嶏纴浠ュ苟琛屽勭悊缂栬疟浠诲姟锛屽姞蹇缂栬疟阃熷害銆傜紪璇戣繃绋嬩腑锛岀郴缁熷皢镙规嵁Makefile鏂囦欢鍜屽叾浠栨瀯寤鸿剼链锛岃嚜锷ㄤ笅杞芥墍闇镄勯勬瀯寤轰簩杩涘埗鏂囦欢锛屽苟缂栬疟婧愪唬镰併
5. 澶勭悊缂栬疟缁撴灉锛氱紪璇戝畬鎴愬悗锛屽皢鍦ㄨ緭鍑虹洰褰曪纸阃氩父鏄痐out/`鐩褰曪级涓鐢熸垚缂栬疟缁撴灉銆傝繖鍖呮嫭鍙鐢ㄤ簬妯℃嫙鍣ㄧ殑绯荤粺闀滃儚銆佸彲鐢ㄤ簬瀹为檯璁惧囩殑OTA鍖呮垨瀹屾暣镄勭郴缁熼暅镀忕瓑銆傛牴鎹闇瑕侊纴鍙浠ヨ繘涓姝ュ勭悊杩欎簺杈揿嚭鏂囦欢锛屽傛墦鍖呫佺惧悕绛夈
鍦ㄦ暣涓缂栬疟杩囩▼涓锛岃缮鍙鑳介亣鍒板悇绉崭緷璧栭梾棰桦拰缂栬疟阌栾锛岄渶瑕佹牴鎹阌栾淇℃伅杩涜岃皟璇曞拰瑙e喅銆傜敱浜峣ndroid婧愪唬镰佸签澶т笖澶嶆潅锛屽畬鏁寸殑缂栬疟鍙鑳介渶瑕佹暟灏忔椂鐢氲呖镟撮暱镞堕棿锛屽洜姝よ愬绩鍜屽悎阃傜殑纭浠堕厤缃涔熸槸鎴愬姛缂栬疟镄勯吨瑕佸洜绱犮
㈣ 简述java程序的编辑编译和运行过程
第一步(编译): 创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点象make。
如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol”的错误。
第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。
特别说明:java类中所有public和protected的实例方法都采用动态绑定机制,所有私有方法、静态方法、构造器及初始化方法<clinit>都是采用静态绑定机制。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到。
(4)简述源码包编译的三个步骤扩展阅读:
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。
Java代码编译:是由Java源码编译器来完成;
Java字节码的执行:是由JVM执行引擎来完成
Java程序从源文件创建到程序运行要经过两大步骤:
1、源文件由编译器编译成字节码(ByteCode)
2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。
㈤ 缂栬疟绋嫔簭宸ヤ綔杩囩▼
缂栬疟绋嫔簭镄勫伐浣滆繃绋嬫秹鍙婃簮绋嫔簭镄勫垎鏋愬拰鐩镙囩▼搴忕殑鐢熸垚銆傞栧厛锛岀▼搴忎细杩涜屾簮浠g爜镄勬镆ワ纴灏嗗叾鍒呜В涓哄熀链鎴愬垎锛屽傛爣璇嗙︺佺被鍨嫔拰杩愮畻绗︾瓑銆傚湪杩欎釜阒舵碉纴缂栬疟鍣ㄤ细镞呯己鍒涘窞阌寤虹﹀彿琛锛屽瓨鍌ㄦ簮绋嫔簭涓镄勬爣璇嗙﹀强鍏跺睘镐э纴濡傚彉閲忋佹暟缁勚佺粨鏋勭瓑镄勭岖被鍜岀被鍨嬶纴浠ュ强鐩镙囩▼搴忔墍闇镄勯濆栦俊鎭鍐岄晣宸с傚父鏁拌〃鍒栾板綍婧愮▼搴忎腑镄勫父鏁板强鍏跺湪鐩镙囩▼搴忎腑镄勫瓨鍌ㄤ綅缃銆
鎺ヤ笅𨱒ワ纴缂栬疟绋嫔簭浼氩皢婧愪唬镰佽浆鎹涓轰竴绉崭腑闂磋瑷褰㈠纺锛屽傛尝鍏拌〃绀恒佷笁鍏幂粍鎴栧洓鍏幂粍锛屼互渚夸簬钖庣画镄勫垎鏋愬拰缁煎悎镎崭綔銆傝繖涓阒舵典娇鐢ㄧ殑鏁版嵁缁撴瀯涓昏佸寘𨰾绗﹀彿琛ㄣ佸父鏁拌〃鍜屼腑闂磋瑷绋嫔簭銆
鍒嗘瀽阒舵靛垎涓鸿瘝娉曞垎鏋愩佽娉曞垎鏋愬拰璇涔夊垎鏋愪笁涓姝ラゃ傝瘝娉曞垎鏋愬櫒锛屾垨绉颁负镓鎻忓櫒锛岃礋璐h瘑鍒婧愪唬镰佷腑镄勫崟璇嶏纴鏋勯犵﹀彿琛ㄥ拰甯告暟琛锛屽苟灏嗘簮浠g爜杞鎹涓虹紪璇戝櫒鑳藉勭悊镄勫唴閮ㄥ舰寮忋傝娉曞垎鏋愬櫒鏄鍏抽敭鐜鑺傦纴瀹冩牴鎹璇瑷瑙勫垯妫镆ヤ唬镰佺殑璇娉曟g‘镐э纴鐢熸垚涓闂磋瑷镄勭粨鏋勚傝涔夊垎鏋愬櫒鍒欑‘淇濈▼搴忕殑璇涔夋g‘锛岄獙璇佹爣璇嗙﹀拰甯告暟镄勪娇鐢锛屽苟鏀堕泦鐩稿叧淇℃伅锛岃繘琛岀浉搴旂殑璇涔夊勭悊銆
镐荤殑𨱒ヨ达纴缂栬疟绋嫔簭阃氲繃涓绯诲垪澶嶆潅镄勮繃绋嬶纴浠庢簮绋嫔簭鍑哄彂锛岄氲繃绗﹀彿琛ㄥ拰涓闂磋瑷锛屾渶缁堢敓鎴愮洰镙囩▼搴忥纴纭淇濈▼搴忕殑姝g‘镐у拰鍙镓ц屾с
㈥ 简述将源程序编译成可执行程序的过程
一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。其中,编译是主要部分,其中又分为六个部分:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。
预编译:主要处理源代码文件中的以“#”开头的预编译指令。处理规则如下:
1、删除所有的#define,展开所有的宏定义。
2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。
3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。
4、删除所有的注释,“//”和“/**/”。
5、保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma once 是为了防止有文件被重复引用。
6、添加行号和文件标识,便于编译时编译器产生调试用的行号信息,和编译时产生编译错误或警告是能够显示行号。
(6)简述源码包编译的三个步骤扩展阅读:
编译过程中语法分析器只是完成了对表达式语法层面的分析,语义分析器则对表达式是否有意义进行判断,其分析的语义是静态语义——在编译期能分期的语义,相对应的动态语义是在运行期才能确定的语义。
其中,静态语义通常包括:声明和类型的匹配,类型的转换,那么语义分析就会对这些方面进行检查,例如将一个int型赋值给int*型时,语义分析程序会发现这个类型不匹配,编译器就会报错。