1.å½å
ä½ä»£ç å¹³å°åªå®¶å¼ºï¼
2.腾讯T2I-adapter源码分析(1)-运行源码跑训练
3.ç¼è¯åç
å½å ä½ä»£ç å¹³å°åªå®¶å¼ºï¼
è¯ä¸å¤è¯´ï¼ç´æ¥ç»å¤§å®¶æ¨èå 个å½å æ¯è¾ä¸»æµçä½ä»£ç å¼åå¹³å°ï¼1ãç»ä¿¡Informatï¼æ¯æ·±å³åºç³åä½æ¨åºçé¢åä¸å¡äººåçä½/é¶ä»£ç å¼åå¹³å°ï¼å ·æé«åº¦çµæ´»çâæ°æ®+æé+æµç¨âå¨æä¿¡æ¯ç®¡ç模åï¼ç¨æ·ä¸åéè¦ä»¥æ¥ä»£ç å¼åï¼å¯ä»¥éè¿èªä¸»é ç½®çæ¹å¼ï¼å¿«éæ建ä¼ä¸è¿è¥æéçå类管çç³»ç»ãèä¸å®ä¸ä¼ä¸å¾®ä¿¡ãééç´§å¯éæï¼è½å¤å¤§å¹ è约ç åææ¬åæ¶é´ï¼å¸®å©ä¼ä¸å®ç°å ¨æ¹ä½çæ°åå转åãå®è¿æä¾äº+ç°æçåºç¨åè¡ä¸æ¨¡æ¿ï¼ä¼ä¸ä¸éè¦ä»é¶å¼å§ï¼ç´æ¥åºäºåºç¨æ模æ¿æ¥ä¿®æ¹ææå±åè½ï¼å¯ä»¥æ´å¿«éé«æå°æ建åºè´´è¿éæ±çåºç¨ã
第äºä¸ªï¼ééå®æï¼é¿éèªå·±å¼åçä½ä»£ç å¹³å°ï¼è·ééä¹ææ¯è¾æ·±åº¦çç»å®ï¼å ¶å®åè½é½æ¯å·®ä¸å¤çï¼éè¿æææ½çæ¹å¼è®¾è®¡è¡¨å设计æµç¨ï¼è®¾è®¡ä»ªè¡¨çä¹åï¼ä½ å¯ä»¥ä¸é®æå®åå¸å°çµè端åææºç«¯ï¼è®©ä½ å ¬å¸å ¶ä»åäºæ¥ä½¿ç¨ã
第ä¸ä¸ªæ¯å¥¥å²ï¼è¿ä¸ªä¹æ¯ééåè¡çãå®çç¹ç¹æ¯é¢åä¸åçåºæ¯åä¸åç人群åäºä¸äºç»åãæ¯å¦è¯´ï¼æé¢åä¸ä¸å¼åè çãé¢åä¸å¡äººç¾¤çãé¢åæ°åå管çåçï¼ä½ å¯ä»¥æ ¹æ®ä½ ä»¬å ¬å¸ä¸åçå¼åæ°´å¹³å»éæ©æä¸ä¸ªã
第å个æ¯ææ³äºãæä¹æ以ä»ç»è¿ä¸ç¹ï¼æ¯åç°ä»ä»¬æ OA å CRM åäºæéï¼ç¸å½äºæ¯ä¸æ³¨å¨æä¸ä¸ªç¹ä¸ãå¦æä½ å¯¹è¿æ¹é¢éæ±æ¯è¾å¼ºçè¯ï¼å¯ä»¥è¯ä¸è¯ã
第äºä¸ªå¢å°±æ¯ä¼ä¼´äºï¼åå§äººæ¯æ´å¿åº·ï¼è¿å»çååä¸åå°ï¼å½æ¶åä¸å°±åäºDiscuzï¼å½å ç论å软件ï¼å ¶å®ä¸ç´ä¹æ¯ To B å¾ï¼ä¹æ¯å½å ææ©ä¸æ¹åé¶ä»£ç å¼åå¹³å°çã
ä»ä»¬å ¶å®è·ä¼ä¸å¾®ä¿¡çæéæ¯è¾å¤ï¼ä½ å¨ä¼ä¸å¾®ä¿¡éè¾¹å线ä¸çéå®ï¼ä¸æ´å¥çCRMæµç¨ä»ä»¬åçæ¯æ¯è¾å®åçã
第å 个就æ¯æéäºï¼è¿ä¹æ¯ä¸ä¸ªé常èççåä¸å ¬å¸äºï¼ä»ææ©æéå»åä¼ä¸æå¡ï¼ç¶åç°å¨æéäºåçä½ä»£ç ãä»ä»¬å®¶çæä¸ä¸ªç¹ç¹å°±æ¯è½å¤æä¾ç§æåçé¨ç½²ã
å¦æä½ å¯¹æ°æ®å®å ¨åæ¹é¢æè¦æ±çè¯ï¼ä½ å°±å¯ä»¥è¯è¯ï¼ä»ä»¬æè§ä¼æ´éåä¸å¤§åçä¼ä¸ã
第ä¸ä¸ªå°±æ¯ç®éäºï¼æåç°ä»ä»¬çä»ç»åå¾ç¹å«å¥½ï¼ä½ ç¨å®å»åå¼åï¼åºæ¬ä¸å°±æ¯ä¸æ¥ï¼ç¬¬ä¸æ¥æ¯è®¾è®¡è¡¨åï¼ç¬¬äºæ¥è®¾è®¡æµç¨ï¼ç¬¬ä¸ä¸ªå°±æ¯ä»ªè¡¨çãç®åçåºç¨æ建ç¨å®è¿è¡ã
以ä¸å 容ï¼å¸æ大家ææ帮å©ï¼
腾讯T2I-adapter源码分析(1)-运行源码跑训练
稳定扩散、线课系统midjourney等AI绘图技术,题申统源为人们带来了令人惊叹的报系效果,不禁让人感叹技术发展的码线日新月异。然而,课题AI绘图的申报aosp源码阅读环境可控性一直不是很好,通过prompt描述词来操控图像很难做到随心所欲。源码为了使AI绘制的线课系统图像更具可控性,Controlnet、题申统源T2I-adapter等技术应运而生。报系本系列文章将从T2I-adapter的码线源码出发,分析其实现方法。课题
本篇是申报第一篇,主要介绍源码的源码运行方法,后续两篇将以深度图为例,线课系统注入与隐藏源码分别分析推理部分和训练部分的代码。分析T2I-Adapter,也是为了继续研究我一直在研究的课题:“AI生成同一人物不同动作”,例如:罗培羽:stable-diffusion生成同一人物不同动作的尝试(多姿势图),Controlnet、T2I-adapter给了我一些灵感,后续将进行尝试。
T2I-Adapter论文地址如下,它与controlnet类似,都是在原模型增加一个旁路,然后对推理结果求和。
T2I-Adapter和controlnet有两个主要的不同点,从图中可见,其一是raid1源码在unet的编码阶段增加参数,而controlnet主要是解码阶段;其二是controlnet复制unit的上半部结构,而T2I-Adapter使用不同的模型结构。由于采用较小的模型,因此T2I-Adapter的模型较小,默认下占用M左右,而controlnet模型一般要5G空间。
首先确保机器上装有3.6版本以上python,然后把代码clone下来。随后安装依赖项,打开requirements.txt,可以看到依赖项的内容。然后下载示例,下载的会放到examples目录下。接着下载sd模型到model目录下,servlet源码包weblogic再下载T2I-Adapter的模型到目录下,模型可以按需到huggingface.co/TencentA...下载。这里我下载了depth和openpose。sd模型除了上述的v1-5,也还下载了sd-v1-4.ckpt。
根据文档,尝试运行一个由深度图生成的例子,下图的左侧是深度图,提示语是"desk, best quality, extremely detailed",右侧是生成出来的。运行过程比较艰辛,一开始在一台8G显存的服务器上跑,显存不够;重新搭环境在一台G显存的服务器上跑,还是仿 游戏 网站源码不够;最后用一台G显存的服务器,终于运行起来了。
接下来尝试跑openpose的例子,下图左侧是骨架图,提示词为"Iron man, high-quality, high-res",右侧是生成的图像。
既然能跑推理,那么尝试跑训练。为了后续修改代码运行,目标是准备一点点数据把训练代码跑起来,至于训练的效果不是当前关注的。程序中也有训练的脚步,我们以训练深度图条件为例,来运行train_depth.py。
显然,习惯了,会有一些问题没法直接运行,需要先做两步工作。准备训练数据,分析代码,定位到ldm/data/dataset_depth.py,反推它的数据集结构,然后准备对应数据。先创建文件datasets/laion_depth_meta_v1.txt,用于存放数据文件的地址,由于只是测试,我就只添加两行。然后准备,图中的.png和.png是结果图,.depth.png和.depth.png是深度图,.txt和.txt是对应的文本描述。
文本描述如下,都只是为了把代码跑起来而做的简单设置。设置环境变量,由于T2I-Adapter使用多卡训练,显然我也没这个环境,因此要让它在单机上跑。而代码中也会获取一些环境变量,因此做简单的设置。
做好准备工作,可以运行程序了,出于硬件条件限制,只能把batch size设置为1。在A显卡跑了约8小时,完成,按默认的配置,模型保存experiments/train_depth/models/model_ad_.pth。那么,使用训练出来的模型试试效果,能生成如下(此处只是为了跑起来代码,用训练集来测试),验证了可以跑起来。
运行起来,但这还不够,我们还得看看代码是怎么写法,下一篇见。
PS:《直观理解AI博弈原理》是笔者写的一篇长文,从五子棋、象棋、围棋的AI演进讲起,从深度遍历、MAX-MIN剪枝再到蒙特卡罗树搜索,一步步介绍AI博弈的原理,而后引出强化学习方法,通俗易懂地介绍AlphaGo围棋、星际争霸强化学习AI、王者荣耀AI的一些强化学习要点,值得推荐。
AUTOMATIC的webui是近期很流行的stable-diffusion应用,它集合stable-diffusion各项常用功能,还通过扩展的形式支持controlnet、lora等技术,我们也分析了它的源码实现,写了一系列文章。
ç¼è¯åç
Cè¯è¨ç¼è¯è¿ç¨è¯¦è§£
Cè¯è¨çç¼è¯é¾æ¥è¿ç¨æ¯è¦ææ们ç¼åçä¸ä¸ªCç¨åº(æºä»£ç )转æ¢æå¯ä»¥å¨ç¡¬ä»¶ä¸è¿è¡çç¨åº(å¯æ§è¡ä»£ç )ï¼éè¦è¿è¡ç¼è¯åé¾æ¥ãç¼è¯å°±æ¯æææ¬å½¢å¼æºä»£ç ç¿»è¯ä¸ºæºå¨è¯è¨å½¢å¼çç®æ æ件çè¿ç¨ãé¾æ¥æ¯æç®æ æ件ãæä½ç³»ç»çå¯å¨ä»£ç åç¨å°çåºæ件è¿è¡ç»ç»å½¢ææç»çæå¯æ§è¡ä»£ç çè¿ç¨ãè¿ç¨å¾è§£å¦ä¸ï¼
ä»å¾ä¸å¯ä»¥çå°ï¼æ´ä¸ªä»£ç çç¼è¯è¿ç¨å为ç¼è¯åé¾æ¥ä¸¤ä¸ªè¿ç¨ï¼ç¼è¯å¯¹åºå¾ä¸ç大æ¬å·æ¬èµ·çé¨åï¼å ¶ä½å为é¾æ¥è¿ç¨ã
ä¸ãç¼è¯è¿ç¨
ç¼è¯è¿ç¨åå¯ä»¥åæ两个é¶æ®µï¼ç¼è¯åæ±ç¼ã
1ãç¼è¯
ç¼è¯æ¯è¯»åæºç¨åº(å符æµ)ï¼å¯¹ä¹è¿è¡è¯æ³åè¯æ³çåæï¼å°é«çº§è¯è¨æ令转æ¢ä¸ºåè½çæçæ±ç¼ä»£ç ï¼æºæ件çç¼è¯è¿ç¨å å«ä¸¤ä¸ªä¸»è¦é¶æ®µï¼
第ä¸ä¸ªé¶æ®µæ¯é¢å¤çé¶æ®µï¼å¨æ£å¼çç¼è¯é¶æ®µä¹åè¿è¡ãé¢å¤çé¶æ®µå°æ ¹æ®å·²æ¾ç½®å¨æ件ä¸çé¢å¤çæ令æ¥ä¿®æ¹æºæ件çå 容ãå¦#includeæ令就æ¯ä¸ä¸ªé¢å¤çæ令ï¼å®æ头æ件çå 容添å å°.cppæ件ä¸ãè¿ä¸ªå¨ç¼è¯ä¹åä¿®æ¹æºæ件çæ¹å¼æä¾äºå¾å¤§ççµæ´»æ§ï¼ä»¥éåºä¸åç计ç®æºåæä½ç³»ç»ç¯å¢çéå¶ãä¸ä¸ªç¯å¢éè¦ç代ç è·å¦ä¸ä¸ªç¯å¢æéç代ç å¯è½ææä¸åï¼å 为å¯ç¨ç硬件ææä½ç³»ç»æ¯ä¸åçãå¨è®¸å¤æ åµä¸ï¼å¯ä»¥æç¨äºä¸åç¯å¢ç代ç æ¾å¨åä¸ä¸ªæ件ä¸ï¼åå¨é¢å¤çé¶æ®µä¿®æ¹ä»£ç ï¼ä½¿ä¹éåºå½åçç¯å¢ã
主è¦æ¯ä»¥ä¸å æ¹é¢çå¤çï¼
(1)å®å®ä¹æ令ï¼å¦ #define a bã
对äºè¿ç§ä¼ªæ令ï¼é¢ç¼è¯æè¦åçæ¯å°ç¨åºä¸çææaç¨bæ¿æ¢ï¼ä½ä½ä¸ºå符串常éç aåä¸è¢«æ¿æ¢ãè¿æ #undefï¼åå°åæ¶å¯¹æ个å®çå®ä¹ï¼ä½¿ä»¥å该串çåºç°ä¸å被æ¿æ¢ã
(2)æ¡ä»¶ç¼è¯æ令ï¼å¦#ifdefï¼#ifndefï¼#elseï¼#elifï¼#endifçã
è¿äºä¼ªæ令çå¼å ¥ä½¿å¾ç¨åºåå¯ä»¥éè¿å®ä¹ä¸åçå®æ¥å³å®ç¼è¯ç¨åºå¯¹åªäºä»£ç è¿è¡å¤çãé¢ç¼è¯ç¨åºå°æ ¹æ®æå ³çæ件ï¼å°é£äºä¸å¿ è¦ç代ç è¿æ»¤æ
(3) 头æ件å å«æ令ï¼å¦#include "FileName"æè #include <FileName>çã
å¨å¤´æ件ä¸ä¸è¬ç¨ä¼ªæ令#defineå®ä¹äºå¤§éçå®(æ常è§çæ¯å符常é)ï¼åæ¶å å«æåç§å¤é¨ç¬¦å·ç声æãéç¨å¤´æ件çç®ç主è¦æ¯ä¸ºäºä½¿æäºå®ä¹å¯ä»¥ä¾å¤ä¸ªä¸åçCæºç¨åºä½¿ç¨ãå 为å¨éè¦ç¨å°è¿äºå®ä¹çCæºç¨åºä¸ï¼åªéå ä¸ä¸æ¡#includeè¯å¥å³å¯ï¼èä¸å¿ åå¨æ¤æ件ä¸å°è¿äºå®ä¹éå¤ä¸éãé¢ç¼è¯ç¨åºå°æ头æ件ä¸çå®ä¹ç»ç»é½å å ¥å°å®æ产ççè¾åºæ件ä¸ï¼ä»¥ä¾ç¼è¯ç¨åºå¯¹ä¹è¿è¡å¤çãå å«å°Cæºç¨åºä¸ç头æ件å¯ä»¥æ¯ç³»ç»æä¾çï¼è¿äºå¤´æ件ä¸è¬è¢«æ¾å¨/usr/includeç®å½ä¸ãå¨ç¨åºä¸#includeå®ä»¬è¦ä½¿ç¨å°æ¬å·(<>)ãå¦å¤å¼å人åä¹å¯ä»¥å®ä¹èªå·±ç头æ件ï¼è¿äºæ件ä¸è¬ä¸Cæºç¨åºæ¾å¨åä¸ç®å½ä¸ï¼æ¤æ¶å¨#includeä¸è¦ç¨åå¼å·("")ã
(4)ç¹æ®ç¬¦å·ï¼é¢ç¼è¯ç¨åºå¯ä»¥è¯å«ä¸äºç¹æ®ç符å·ã
ä¾å¦å¨æºç¨åºä¸åºç°çLINEæ è¯å°è¢«è§£é为å½åè¡å·(åè¿å¶æ°)ï¼FILEå被解é为å½å被ç¼è¯çCæºç¨åºçå称ãé¢ç¼è¯ç¨åºå¯¹äºå¨æºç¨åºä¸åºç°çè¿äºä¸²å°ç¨åéçå¼è¿è¡æ¿æ¢ã
é¢ç¼è¯ç¨åºæå®æçåºæ¬ä¸æ¯å¯¹æºç¨åºçâæ¿ä»£âå·¥ä½ãç»è¿æ¤ç§æ¿ä»£ï¼çæä¸ä¸ªæ²¡æå®å®ä¹ã没ææ¡ä»¶ç¼è¯æ令ã没æç¹æ®ç¬¦å·çè¾åºæ件ãè¿ä¸ªæ件çå«ä¹å没æç»è¿é¢å¤ççæºæ件æ¯ç¸åçï¼ä½å 容ææä¸åãä¸ä¸æ¥ï¼æ¤è¾åºæ件å°ä½ä¸ºç¼è¯ç¨åºçè¾åºè被翻è¯æ为æºå¨æ令ã
第äºä¸ªé¶æ®µç¼è¯ãä¼åé¶æ®µãç»è¿é¢ç¼è¯å¾å°çè¾åºæ件ä¸ï¼åªæ常éï¼å¦æ°åãå符串ãåéçå®ä¹ï¼ä»¥åCè¯è¨çå ³é®åï¼å¦main,if,else,for,while,{ ,}, +,-,*,\ççã
ç¼è¯ç¨åºæè¦ä½å¾å·¥ä½å°±æ¯éè¿è¯æ³åæåè¯æ³åæï¼å¨ç¡®è®¤ææçæ令é½ç¬¦åè¯æ³è§åä¹åï¼å°å ¶ç¿»è¯æçä»·çä¸é´ä»£ç 表示ææ±ç¼ä»£ç ã
ä¼åå¤çæ¯ç¼è¯ç³»ç»ä¸ä¸é¡¹æ¯è¾è°æ·±çææ¯ãå®æ¶åå°çé®é¢ä¸ä» åç¼è¯ææ¯æ¬èº«æå ³ï¼èä¸åæºå¨ç硬件ç¯å¢ä¹æå¾å¤§çå ³ç³»ãä¼åä¸é¨åæ¯å¯¹ä¸é´ä»£ç çä¼åãè¿ç§ä¼åä¸ä¾èµäºå ·ä½ç计ç®æºãå¦ä¸ç§ä¼åå主è¦é对ç®æ 代ç ççæèè¿è¡çã
对äºåä¸ç§ä¼åï¼ä¸»è¦çå·¥ä½æ¯å é¤å ¬å ±è¡¨è¾¾å¼ã循ç¯ä¼å(代ç å¤æã强度åå¼±ãåæ¢å¾ªç¯æ§å¶æ¡ä»¶ãå·²ç¥éçå并ç)ãå¤åä¼ æï¼ä»¥åæ ç¨èµå¼çå é¤ï¼ççã
åä¸ç§ç±»åçä¼ååæºå¨ç硬件ç»æå¯åç¸å ³ï¼æ主è¦çæ¯èèæ¯å¦ä½å åå©ç¨æºå¨çå个硬件å¯åå¨åæ¾çæå ³åéçå¼ï¼ä»¥åå°å¯¹äºå åç访é®æ¬¡æ°ãå¦å¤ï¼å¦ä½æ ¹æ®æºå¨ç¡¬ä»¶æ§è¡æ令çç¹ç¹(å¦æµæ°´çº¿ãRISCãCISCãVLIWç)è对æ令è¿è¡ä¸äºè°æ´ä½¿ç®æ 代ç æ¯è¾çï¼æ§è¡çæçæ¯è¾é«ï¼ä¹æ¯ä¸ä¸ªéè¦çç 究课é¢ã
2ãæ±ç¼
æ±ç¼å®é ä¸æææ±ç¼è¯è¨ä»£ç ç¿»è¯æç®æ æºå¨æ令çè¿ç¨ã对äºè¢«ç¿»è¯ç³»ç»å¤ççæ¯ä¸ä¸ªCè¯è¨æºç¨åºï¼é½å°æç»ç»è¿è¿ä¸å¤çèå¾å°ç¸åºçç®æ æ件ãç®æ æ件ä¸æåæ¾çä¹å°±æ¯ä¸æºç¨åºçæçç®æ çæºå¨è¯è¨ä»£ç ãç®æ æ件ç±æ®µç»æãé常ä¸ä¸ªç®æ æ件ä¸è³å°æ两个段ï¼
代ç 段ï¼è¯¥æ®µä¸æå å«ç主è¦æ¯ç¨åºçæ令ã该段ä¸è¬æ¯å¯è¯»åå¯æ§è¡çï¼ä½ä¸è¬å´ä¸å¯åã
æ°æ®æ®µï¼ä¸»è¦åæ¾ç¨åºä¸è¦ç¨å°çåç§å ¨å±åéæéæçæ°æ®ãä¸è¬æ°æ®æ®µé½æ¯å¯è¯»ï¼å¯åï¼å¯æ§è¡çã
UNIXç¯å¢ä¸ä¸»è¦æä¸ç§ç±»åçç®æ æ件ï¼
(1)å¯éå®ä½æ件
å ¶ä¸å å«æéåäºå ¶å®ç®æ æ件é¾æ¥æ¥å建ä¸ä¸ªå¯æ§è¡çæè å ±äº«çç®æ æ件ç代ç åæ°æ®ã
(2)å ±äº«çç®æ æ件
è¿ç§æ件åæ¾äºéåäºå¨ä¸¤ç§ä¸ä¸æéé¾æ¥ç代ç åæ°æ®ã
第ä¸ç§æ¯é¾æ¥ç¨åºå¯æå®ä¸å ¶å®å¯éå®ä½æ件åå ±äº«çç®æ æ件ä¸èµ·å¤çæ¥å建å¦ä¸ä¸ª ç®æ æ件ï¼
第äºç§æ¯å¨æé¾æ¥ç¨åºå°å®ä¸å¦ä¸ä¸ªå¯æ§è¡æ件åå ¶å®çå ±äº«ç®æ æ件ç»åå°ä¸èµ·ï¼å建ä¸ä¸ªè¿ç¨æ 象ã
(3)å¯æ§è¡æ件
å®å å«äºä¸ä¸ªå¯ä»¥è¢«æä½ç³»ç»å建ä¸ä¸ªè¿ç¨æ¥æ§è¡ä¹çæ件ãæ±ç¼ç¨åºçæçå®é ä¸æ¯ç¬¬ä¸ç§ç±»åçç®æ æ件ã对äºå两ç§è¿éè¦å ¶ä»çä¸äºå¤çæ¹è½å¾å°ï¼è¿ä¸ªå°±æ¯é¾æ¥ç¨åºçå·¥ä½äºã
äºãé¾æ¥è¿ç¨
ç±æ±ç¼ç¨åºçæçç®æ æ件并ä¸è½ç«å³å°±è¢«æ§è¡ï¼å ¶ä¸å¯è½è¿æ许å¤æ²¡æ解å³çé®é¢ã
ä¾å¦ï¼æ个æºæ件ä¸çå½æ°å¯è½å¼ç¨äºå¦ä¸ä¸ªæºæ件ä¸å®ä¹çæ个符å·(å¦åéæè å½æ°è°ç¨ç)ï¼å¨ç¨åºä¸å¯è½è°ç¨äºæ个åºæ件ä¸çå½æ°ï¼ççãææçè¿äºé®é¢ï¼é½éè¦ç»é¾æ¥ç¨åºçå¤çæ¹è½å¾ä»¥è§£å³ã
é¾æ¥ç¨åºç主è¦å·¥ä½å°±æ¯å°æå ³çç®æ æ件彼æ¤ç¸è¿æ¥ï¼ä¹å³å°å¨ä¸ä¸ªæ件ä¸å¼ç¨ç符å·å该符å·å¨å¦å¤ä¸ä¸ªæ件ä¸çå®ä¹è¿æ¥èµ·æ¥ï¼ä½¿å¾ææçè¿äºç®æ æ件æ为ä¸ä¸ªè½å¤è¢«æä½ç³»ç»è£ å ¥æ§è¡çç»ä¸æ´ä½ã
æ ¹æ®å¼å人åæå®çååºå½æ°çé¾æ¥æ¹å¼çä¸åï¼é¾æ¥å¤çå¯å为两ç§ï¼
(1)éæé¾æ¥
å¨è¿ç§é¾æ¥æ¹å¼ä¸ï¼å½æ°ç代ç å°ä»å ¶æå¨å°éæé¾æ¥åºä¸è¢«æ·è´å°æç»çå¯æ§è¡ç¨åºä¸ãè¿æ ·è¯¥ç¨åºå¨è¢«æ§è¡æ¶è¿äºä»£ç å°è¢«è£ å ¥å°è¯¥è¿ç¨çèæå°å空é´ä¸ãéæé¾æ¥åºå®é ä¸æ¯ä¸ä¸ªç®æ æ件çéåï¼å ¶ä¸çæ¯ä¸ªæ件å«æåºä¸çä¸ä¸ªæè ä¸ç»ç¸å ³å½æ°ç代ç ã
(2) å¨æé¾æ¥
å¨æ¤ç§æ¹å¼ä¸ï¼å½æ°ç代ç 被æ¾å°ç§°ä½æ¯å¨æé¾æ¥åºæå ±äº«å¯¹è±¡çæ个ç®æ æ件ä¸ãé¾æ¥ç¨åºæ¤æ¶æä½çåªæ¯å¨æç»çå¯æ§è¡ç¨åºä¸è®°å½ä¸å ±äº«å¯¹è±¡çåå以åå ¶å®å°éçç»è®°ä¿¡æ¯ãå¨æ¤å¯æ§è¡æ件被æ§è¡æ¶ï¼å¨æé¾æ¥åºçå ¨é¨å 容å°è¢«æ å°å°è¿è¡æ¶ç¸åºè¿ç¨çèå°å空é´ãå¨æé¾æ¥ç¨åºå°æ ¹æ®å¯æ§è¡ç¨åºä¸è®°å½çä¿¡æ¯æ¾å°ç¸åºçå½æ°ä»£ç ã
对äºå¯æ§è¡æ件ä¸çå½æ°è°ç¨ï¼å¯åå«éç¨å¨æé¾æ¥æéæé¾æ¥çæ¹æ³ã使ç¨å¨æé¾æ¥è½å¤ä½¿æç»çå¯æ§è¡æ件æ¯è¾çå°ï¼å¹¶ä¸å½å ±äº«å¯¹è±¡è¢«å¤ä¸ªè¿ç¨ä½¿ç¨æ¶è½è约ä¸äºå åï¼å 为å¨å åä¸åªéè¦ä¿åä¸ä»½æ¤å ±äº«å¯¹è±¡ç代ç ãä½å¹¶ä¸æ¯ä½¿ç¨å¨æé¾æ¥å°±ä¸å®æ¯ä½¿ç¨éæé¾æ¥è¦ä¼è¶ãå¨æäºæ åµä¸å¨æé¾æ¥å¯è½å¸¦æ¥ä¸äºæ§è½ä¸æ害ã
æ们å¨linux使ç¨çgccç¼è¯å¨ä¾¿æ¯æ以ä¸çå 个è¿ç¨è¿è¡æç»ï¼ä½¿ç¨æ·åªä½¿ç¨ä¸æ¬¡å½ä»¤å°±æç¼è¯å·¥ä½å®æï¼è¿çç¡®æ¹ä¾¿äºç¼è¯å·¥ä½ï¼ä½å¯¹äºåå¦è äºè§£ç¼è¯è¿ç¨å°±å¾ä¸å©äºï¼ä¸å¾ä¾¿æ¯gcc代ççç¼è¯è¿ç¨ï¼
ä»ä¸å¾å¯ä»¥çå°ï¼
é¢ç¼è¯
å°.c æ件转åæ .iæ件
使ç¨çgccå½ä»¤æ¯ï¼gcc âE
对åºäºé¢å¤çå½ä»¤cpp
ç¼è¯
å°.c/.hæ件转æ¢æ.sæ件
使ç¨çgccå½ä»¤æ¯ï¼gcc âS
对åºäºç¼è¯å½ä»¤ cc âS
æ±ç¼
å°.s æ件转åæ .oæ件
使ç¨çgcc å½ä»¤æ¯ï¼gcc âc
对åºäºæ±ç¼å½ä»¤æ¯ as
é¾æ¥
å°.oæ件转åæå¯æ§è¡ç¨åº
使ç¨çgcc å½ä»¤æ¯ï¼ gcc
对åºäºé¾æ¥å½ä»¤æ¯ ld
æ»ç»èµ·æ¥ç¼è¯è¿ç¨å°±ä¸é¢çå个è¿ç¨ï¼é¢ç¼è¯ãç¼è¯ãæ±ç¼ãé¾æ¥ãäºè§£è¿å个è¿ç¨ä¸æåçå·¥ä½ï¼å¯¹æ们ç解头æ件ãåºççå·¥ä½è¿ç¨æ¯æ帮å©çï¼èä¸æ¸ æ¥çäºè§£ç¼è¯é¾æ¥è¿ç¨è¿å¯¹æ们å¨ç¼ç¨æ¶å®ä½é误ï¼ä»¥åç¼ç¨æ¶å°½éè°å¨ç¼è¯å¨çæ£æµé误ä¼æå¾å¤§ç帮å©çã
æ¯å¦å¯ä»¥è§£å³æ¨çé®é¢ï¼