编译器主要功能
1. 简述一下编译器和链接器的作用
1、编译器:
编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文件。
2、链接器:
当链接器进行链接的时候,首先决定各个目标文件在最终可执行文件里的位置。然后访问所有目标文件的地址重定义表,对其中记录的地址进行重定向(加上一个偏移量,即该编译单元在可执行文件上的起始地址)。
然后遍历所有目标文件的未解决符号表,并且在所有的导出符号表里查找匹配的符号,并在未解决符号表中所记录的位置上填写实现地址。最后把所有的目标文件的内容写在各自的位置上,再作一些另的工作,就生成一个可执行文件。
2. java编译器的功能是什么编译过程中主要完成哪些操作
主要是把.java文件编译成.class文件,在编译的过程中,初始化static成员,
3. C语言编译器是用来做什么的
编译器,是将便于人编写,阅读,维护的高阶计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译器将原始程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源代码一般为高阶语言 (High-level language), 如 Pascal、C++、Java 等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。
一个现代编译器的主要工作流程如下:
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 连接器 (Linker) → 可执行程序 (executables)
4. 鏂硅垷缂栬疟鍣ㄦ湁浠涔堜綔鐢
鏂硅垷缂栬疟鍣ㄧ殑浣灭敤锛
銆銆1銆佹彁鍗囱繍琛屾晥鐜
銆銆
銆銆澶ч儴鍒嗗畨鍗揿簲鐢ㄩ兘娑夊强涓嶅悓寮鍙戣瑷锛屼笉钖岃瑷褰㈡垚镄勪唬镰侀渶瑕佸湪杩愯屾佷腑杩涜屽岗钖屼粠钥屼骇鐢熼濆栨秷钥椼傝屾柟鑸熺紪璇戝櫒鏄涓氱晫棣栦釜澶氲瑷镵斿悎浼桦寲镄勭紪璇戝櫒锛屽紑鍙戣呭湪寮鍙戠幆澧冧腑鍙浠ヤ竴娆℃у皢澶氲瑷缁熶竴缂栬疟涓轰竴濂楁満鍣ㄧ爜锛岃繍琛屾椂镞犻渶浜х敓璺ㄨ瑷甯︽潵镄勯濆栨秷钥楋纴骞跺彲浠ヨ繘琛岃法璇瑷镄勮仈钖堜紭鍖栵纴鎻愬崌杩愯屾晥鐜囥
銆銆2銆佹彁鍗囩郴缁熷搷搴旀ц兘锛屾彁鍗囩郴缁熸搷浣沧祦鐣呭害
銆銆
銆銆瀹夊崜镊韬镄勭紪璇戞妧链鍦ㄤ笉鏂镄勫彂灞曪纴浣嗗嬬粓闇瑕佸湪杩愯屼腑渚濊禆铏氭嫙链烘潵杩涜屽姩镐佺紪璇戝拰瑙i喷镓ц岋纴瀵圭郴缁熻祫婧愭秷钥楄缉澶с傝屾柟鑸熺紪璇戝櫒鍦ㄥ紑鍙戠幆澧冧腑灏卞彲浠ュ畬鎴愬叏閮ㄤ唬镰佺殑缂栬疟锛屾坠链哄畨瑁呭簲鐢ㄧ▼搴忓悗镞犻渶渚濊禆铏氭嫙链鸿祫婧愶纴鍗冲彲鍏ㄩ熻繍琛岀▼搴忥纴甯︽潵鏁堢巼涓婄殑鏋佸ぇ鎻愬崌銆备妇涓涓渚嫔瓙锛欵MUI 9.1浠呬粎瀵圭郴缁熺粍浠禨ystem Server搴旂敤浜嗗崕涓烘柟鑸熺紪璇戝櫒钖庯纴灏卞甫𨱒ヤ简绯荤粺镎崭綔娴佺晠搴︽彁鍗24%锛岀郴缁熷搷搴旀ц兘鎻愬崌44%镄勬敹鐩娿
銆銆3銆佽╁洖鏀舵満鍒跺彉寰楅珮鏁
銆銆鍐呭瓨绠$悊鏄绋嫔簭寮鍙戜笌杩愯屾椂闇瑕侀吨镣硅冭槛镄勯儴鍒嗭纴涔熷拰绯荤粺娴佺晠搴︽伅鎭鐩稿叧銆傚畨鍗揿湪鍐呭瓨锲炴敹涓婇噰鐢ㄩ泦涓锲炴敹链哄埗锛屽彂澹板叏灞锲炴敹镞舵洿闇瑕佹殏锅滃簲鐢锛岃繖涔熸槸闅忔満鍗¢】镄勬牴锲犱箣涓銆傝屾柟鑸熺紪璇戝櫒鎻愪緵浜嗘洿楂樻晥镄勫唴瀛桦洖鏀舵満鍒讹纴锲炴敹镞舵棤闇𨱌傚仠搴旂敤锛岄殢镞剁敤闅忔椂锲炴敹锛屽ぇ澶ф彁楂樿繍琛岄熷害銆
銆銆4銆佷紭鍖栧簲鐢ㄧ骇缂栬疟浼
銆銆浠g爜浼桦寲鏄缂栬疟鍣ㄦ渶涓烘牳蹇幂殑锷熻兘锛屼篃鏄璇勫垽涓涓缂栬疟鍣ㄤ紭锷f渶閲嶈佺殑镙囧嗳銆傜敱浜庡畨鍗揿簲鐢ㄤ娇鐢ㄤ简铏氭嫙链烘満鍒讹纴闅句互闱㈠悜涓嶅悓搴旂敤瀵硅櫄𨰾熸満杩涜岄拡瀵规х殑𨱔垫椿浼桦寲銆傚畨鍗揂RT镄𪞝oT鍜孞IT锷ㄦ佺紪璇戝洜涓烘槸杩愯屽湪镓嬫満涓婏纴鍙楄祫婧愭墍闄愶纴锲犺屽彧鑳戒娇鐢ㄧ亩鍗旷殑浼桦寲绠楁硶銆傝屾柟鑸熺紪璇戝櫒鐢变簬鏄鍦ㄥ簲鐢ㄥ紑鍙戦桩娈佃繘琛岀紪璇戯纴镓浠ュ彲浠ュ厑璁镐笉钖屽簲鐢ㄧ伒娲婚噰鐢ㄤ笉钖岀殑缂栬疟浼桦寲鏂规堬纴钥屼笖锲犱负鍦ㄥ紑鍙戠幆澧幂紪璇戜笉浼氩弹鍒版坠链烘ц兘镄勯檺鍒讹纴鍙浠ヤ娇鐢ㄦ洿澶氩厛杩涚殑浼桦寲绠楁硶锛屼粠钥屼娇寰楁疮涓搴旂敤镄勬ц兘杈惧埌链浣炽
銆銆5銆佺亩鍗曟槗鐢锛屽紑鏀惧紑婧
銆銆鍗庝负鍦ㄦ寔缁杩涜屾妧链鍒涙柊镄勫悓镞讹纴涔熸敞閲嶅皢鎶链鎴愭灉锲为堣屼笟锛屽崕涓烘柟鑸熺紪璇戝櫒鍦ㄥ紑鍙戞瀯寤虹殑阒舵典负寮鍙戣呮彁渚涘揩阃熺殑闆嗘垚缂栬疟鐜澧冿纴澶уぇ闄崭绠浜嗗紑鍙戣呯殑瀛︿範鎴愭湰鍜屼娇鐢ㄦ垚链锛屼护浜т笟涓庢洿澶氱敤鎴峰弹鐩娿傚崕涓烘柟鑸熺紪璇戝櫒浼氢粠2019骞村紑濮嫔叏闱㈠紑婧愶纴闾璇锋暣涓浜т笟鍜岀敓镐佹潵涓璧峰叡钖屽叧娉ㄥ拰鎻愬崌瀹夊崜镐ц兘浣挞獙銆傜户鍗庝负P30绯诲垪鍙戝竷浼氭柟鑸熺紪璇戝櫒寮婧愬悗锛屽皢鍦2019骞8链堢殑鍗庝负缁堢寮鍙戣呭ぇ浼氩e竷鏂硅垷缂栬疟妗嗘灦浠g爜寮婧愶纴钖庣画浼氩湪2019骞11链堢殑缁跨洘寮鍙戣呭ぇ浼氩疄鐜板畬鏁存柟鑸熺紪璇戝櫒浠g爜寮婧愩
5. java编译器的作用是什么
java编译器的作用就是“编译”,即将java源代码编译成中间代码字节码文件。
编译时,编译器(java.exe)首先读入 java 源代码,然后进行语法检查,如果出现问题就终止编译。语法检查通过后,生成中间代码即字节码。
字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。
编译器编译生成与平台无关的字节码文件后,提供给 JVM (Java虚拟机)执行。
6. 鐢佃剳绋嫔簭镄勭紪璇戙侀摼鎺ャ佽呰浇鍜屾墽琛
涓轰简浣跨数鑴戠▼搴忛‘鐣呰繍琛岋纴鐢佃剳闇瑕佸姞杞戒唬镰佸拰鏁版嵁锛屽啀鐢卞勭悊鍣ㄦ墽琛屽懡浠ゃ傛暣涓娴佺▼鍙姒傛嫭涓虹紪璇戙侀摼鎺ャ佽呰浇鍜屾墽琛屽洓澶фラゃ
👨💻缂栬疟
缂栬疟杩囩▼鍒嗕负缂栬疟鍜屾眹缂栦袱涓阒舵点傜紪璇戝櫒璐熻矗璇诲彇婧愮▼搴忕殑瀛楃︽祦锛岃繘琛岃瘝娉曞拰璇娉曞垎鏋愶纴灏嗛珮绾ц瑷鎸囦护杞鍖栦负姹囩紪浠g爜锛屽叿链夌瓑鏁埚姛鑳姐傛眹缂栧櫒鍒椤皢姹囩紪浠g爜杞鍖栦负链哄櫒鍙镓ц岀殑锻戒护锛屽嚑涔庢疮涓姹囩紪璇鍙ラ兘瀵瑰簲涓𨱒℃満鍣ㄦ寚浠ゃ
🔗阈炬帴
阈炬帴鐜鑺备富瑕佸勭悊钖勬ā鍧楅棿镄勭浉浜掑紩鐢锛岀‘淇濆畠浠鑳藉熸g‘琛旀帴銆傞润镐侀摼鎺ュ湪缂栬疟阒舵靛皢闱欐佸簱鐩存帴锷犲叆鍒板彲镓ц屾枃浠朵腑锛屽艰嚧鍙镓ц屾枃浠惰缉澶э绂锷ㄦ侀摼鎺ュ垯鍦ㄩ摼鎺ラ桩娈典粎锷犲叆鎻忚堪淇℃伅锛岀▼搴忔墽琛屾椂鍐崭粠绯荤粺鍐呭瓨涓锷犺浇鐩稿簲镄勫姩镐佸簱銆
📦瑁呰浇
缁忚繃阈炬帴钖庯纴寰楀埌鍙镓ц屾枃浠讹纴涓嬩竴姝ユ槸灏嗗畠锷犺浇鍒板唴瀛树腑銆傜敱浜庣幇浠f搷浣灭郴缁熼噰鐢ㄥ垎椤电$悊鍐呭瓨锛屾搷浣灭郴缁熷彧闇璇诲彇鍙镓ц屾枃浠剁殑鏂囦欢澶达纴寤虹珛璧峰彲镓ц屾枃浠朵笌铏氭嫙鍐呭瓨镄勬椠灏勫叧绯伙纴钥屾棤闇鐪熸e皢绋嫔簭杞藉叆鍐呭瓨銆
🏃铀️杩愯
锷犺浇鍣ㄥ皢鍙镓ц岀洰镙囨枃浠朵腑镄勪唬镰佸拰鏁版嵁浠庣佺洏澶嶅埗鍒板唴瀛树腑锛岀劧钖庤烦杞鍒扮▼搴忕殑绗涓𨱒℃寚浠ゆ垨鍏ュ彛镣规潵杩愯岀▼搴忋傚湪绋嫔簭杩愯岃繃绋嬩腑锛屽傚彂鐜版煇浜涘唴瀛橀〉鍦ㄧ墿鐞嗗唴瀛树腑涓嶅瓨鍦锛孋PU浼氲Е鍙戠己椤靛纾甯搞傛ゆ椂锛孋PU灏嗘带鍒舵潈浜ょ粰镎崭綔绯荤粺镄勫纾甯稿勭悊鍑芥暟锛岀敱镎崭綔绯荤粺璐熻矗灏嗘ゅ唴瀛橀〉镄勬暟鎹浠庣佺洏璇诲彇鍒扮墿鐞嗗唴瀛树腑銆
7. 什么是GCCGCC有什么作用
GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。
GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的着名例子,由自由软件基金会以GPL协议发布。
GCC功能与作用:
1、预处理
命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。
2、编译
用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。
3、连接
当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。
4、汇编
汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。
(7)编译器主要功能扩展阅读:
gcc所遵循的部分约定规则:
1、.c为后缀的文件,C语言源代码文件。
2、.a为后缀的文件,是由目标文件构成的档案库文件。
3、.h为后缀的文件,是程序所包含的头文件。
4、.i 为后缀的文件,是C源代码文件且不应该对其执行预处理。
5、.m为后缀的文件,是Objective-C源代码文件。
6、.o为后缀的文件,是编译后的目标文件。
7、.s为后缀的文件,是汇编语言源代码文件。
8. 编译器的功能是什么
1、编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)。
2、工作方法:
1)、首先编译器进行语法分析,也就是要把那些字符串分离出来。
2)、然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。
3)、最后生成的是目标文件,也称为obj文件。
4)、再经过链接器的链接就可以生成最后的EXE文件了。
5)、有些时候需要把多个文件产生的目标文件进行链接,产生最后的代码。这一过程称为交叉链接。