1.ç¼è¯åè°è¯çåºå«
2.C语言中编译 生成 调试 测试 运行各是源码译什么意思有什么区别
3.LLVM源码编译及调试
4.C语言中编译生成调试测试运行各是什么意思有什么区别
5.onnxruntime源码学习-编译与调试 (公网&内网)
ç¼è¯åè°è¯çåºå«
ããç¼è¯åè°è¯é½æ¯åç¨åºçéè¦ç¯èãå®ä»¬ä¸¤è æä»ä¹åºå«å¢?ä¸é¢ï¼æè·å¤§å®¶å享ä¸ä¸ç¼è¯åè°è¯çåºå«ããã1.ç¼è¯åè°è¯çåºå«
ããç¼è¯æ¯ç¼è¯å¨å¨ä½ ç¨åºæ²¡æè¿è¡çæ¶åå¸®ä½ æ£æ¥é误ã
ããè°è¯æ¯ä½ ç¨è°è¯å¨å¨ç¨åºè¿è¡ä»¥åï¼æ ¹æ®è¿è¡ç¶åµæ¥æ£æ¥é误ã
ããè¿ä¸¤è çä¸å¯éçï¼é¦å å¾ç¼è¯éè¿ï¼ä½ æè½è°è¯åï¼ç¼è¯æ£ç¡®åï¼ä¼çæexeæ件ï¼IDEä¸å¯å¨ç¨åºï¼å¯ä»¥è¿è¡è°è¯ã
ããç¼è¯æ¯ææºä»£ç åæäºè¿å¶objçè¿ç¨(é¾æ¥åæ为å¯æ§è¡æ件)ï¼å½ç¶ä¼å å¸®ä½ æ£æ¥ææ ç®åçè¯æ³é®é¢ï¼è¦ä¸ç¼è¯å¨äººå®¶ä¸è®¤è¯ï¼ä½ èªå·±è¯´çææ é»è¾å°±åç¼è¯å¨æ å ³äºã
ããè°è¯é¦å éè¦çæäºè¿å¶ä»£ç ï¼æ以éè¦é¦å è¿è¡ç¼è¯åé¾æ¥ï¼ç¶åå°æç¹åï¼è°è¯å¨ä¼å¸®ä½ å int 3ä¸æï¼å°±åä½äºã
ããç¼è¯å ³æ³¨è¯æ³é误ï¼è°è¯å ³æ³¨é»è¾é误ãä¹å°±æ¯è¯´ç¼è¯å ³æ³¨çæ¯syntax(è¯æ³)æ¹é¢çé®é¢ï¼è°å¼å ³æ³¨çæ¯semantics(è¯ä¹)æ¹é¢çé®é¢ã
ãã2.ç¼è¯è¯æ³åæ
ããè¯æ³åæçä»»å¡æ¯å¯¹ç±å符ç»æçåè¯è¿è¡å¤çï¼ä»å·¦è³å³é个å符å°å¯¹æºç¨åºè¿è¡æ«æï¼äº§çä¸ä¸ªä¸ªçåè¯ç¬¦å·ï¼æä½ä¸ºå符串çæºç¨åºæ¹é æ为åè¯ç¬¦å·ä¸²çä¸é´ç¨åºãæ§è¡è¯æ³åæçç¨åºç§°ä¸ºè¯æ³åæç¨åºææ«æå¨ã
ããæºç¨åºä¸çåè¯ç¬¦å·ç»æ«æå¨åæï¼ä¸è¬äº§çäºå å¼:åè¯ç§å«;åè¯èªèº«çå¼ãåè¯ç§å«é常ç¨æ´æ°ç¼ç ï¼å¦æä¸ä¸ªç§å«åªå«ä¸ä¸ªåè¯ç¬¦å·ï¼é£ä¹å¯¹è¿ä¸ªåè¯ç¬¦å·ï¼ç§å«ç¼ç å°±å®å ¨ä»£è¡¨å®èªèº«çå¼äºãè¥ä¸ä¸ªç§å«å«æ许å¤ä¸ªåè¯ç¬¦å·ï¼é£ä¹ï¼å¯¹äºå®çæ¯ä¸ªåè¯ç¬¦å·ï¼é¤äºç»åºç§å«ç¼ç 以å¤ï¼è¿åºç»åºèªèº«çå¼ã
ããè¯æ³åæå¨ä¸è¬æ¥è¯´æ两ç§æ¹æ³æé :æå·¥æé åèªå¨çæãæå·¥æé å¯ä½¿ç¨ç¶æå¾è¿è¡å·¥ä½ï¼èªå¨çæ使ç¨ç¡®å®çæéèªå¨æºæ¥å®ç°ã
ãã3.ç¼è¯è¯æ³åæ
ããç¼è¯ç¨åºçè¯æ³åæå¨ä»¥åè¯ç¬¦å·ä½ä¸ºè¾å ¥ï¼åæåè¯ç¬¦å·ä¸²æ¯å¦å½¢æ符åè¯æ³è§åçè¯æ³åä½ï¼å¦è¡¨è¾¾å¼ãèµå¼ã循ç¯çï¼æåçæ¯å¦ææä¸ä¸ªç¬¦åè¦æ±çç¨åºï¼æ该è¯è¨ä½¿ç¨çè¯æ³è§ååææ£æ¥æ¯æ¡è¯å¥æ¯å¦ææ£ç¡®çé»è¾ç»æï¼ç¨åºæ¯æç»çä¸ä¸ªè¯æ³åä½ãç¼è¯ç¨åºçè¯æ³è§åå¯ç¨ä¸ä¸ææ å ³ææ³æ¥å»ç»ã
ããè¯æ³åæçæ¹æ³å为两ç§:èªä¸èä¸åææ³åèªä¸èä¸åææ³ãèªä¸èä¸å°±æ¯ä»ææ³çå¼å§ç¬¦å·åºåï¼åä¸æ¨å¯¼ï¼æ¨åºå¥åãèèªä¸èä¸åææ³éç¨çæ¯ç§»è¿å½çº¦æ³ï¼åºæ¬ææ³æ¯:ç¨ä¸ä¸ªå¯å符å·çå è¿ååºæ ï¼æè¾å ¥ç¬¦å·ä¸ä¸ªä¸ä¸ªå°ç§»è¿æ éï¼å½æ 顶形ææ个产çå¼çä¸ä¸ªåéå¼æ¶ï¼å³ææ 顶çè¿ä¸é¨åå½çº¦æ该产çå¼çå·¦é»ç¬¦å·ã
ãã4.代ç ä¼å
ãã代ç ä¼åæ¯æ对ç¨åºè¿è¡å¤ç§çä»·åæ¢ï¼ä½¿å¾ä»åæ¢åçç¨åºåºåï¼è½çææ´ææçç®æ 代ç ãæè°çä»·ï¼æ¯æä¸æ¹åç¨åºçè¿è¡ç»æãæè°ææï¼ä¸»è¦æç®æ 代ç è¿è¡æ¶é´è¾çï¼ä»¥åå ç¨çåå¨ç©ºé´è¾å°ãè¿ç§åæ¢ç§°ä¸ºä¼åã
ããæ两类ä¼å:ä¸ç±»æ¯å¯¹è¯æ³åæåçä¸é´ä»£ç è¿è¡ä¼åï¼å®ä¸ä¾èµäºå ·ä½ç计ç®æº;å¦ä¸ç±»æ¯å¨çæç®æ 代ç æ¶è¿è¡çï¼å®å¨å¾å¤§ç¨åº¦ä¸ä¾èµäºå ·ä½ç计ç®æºã对äºåä¸ç±»ä¼åï¼æ ¹æ®å®ææ¶åçç¨åºèå´å¯å为å±é¨ä¼åã循ç¯ä¼ååå ¨å±ä¼åä¸ä¸ªä¸åç级å«ã
ãã4.ç¼è¯åºéå¤ç
ããå¦æç¼è¯è¿ç¨ä¸åç°æºç¨åºæé误ï¼ç¼è¯ç¨åºåºæ¥åé误çæ§è´¨åé误çåççå°ç¹ï¼å¹¶ä¸å°é误æé æçå½±åéå¶å¨å°½å¯è½å°çèå´å ï¼ä½¿å¾æºç¨åºçå ¶ä½é¨åè½ç»§ç»è¢«ç¼è¯ä¸å»ï¼æäºç¼è¯ç¨åºè¿è½èªå¨çº æ£é误ï¼è¿äºå·¥ä½ç±é误å¤çç¨åºå®æã
ããéè¦æ³¨æçæ¯ï¼ä¸è¬ä¸ç¼è¯å¨åªåè¯æ³æ£æ¥åæç®åçè¯ä¹æ£æ¥ï¼èä¸æ£æ¥ç¨åºçé»è¾ãé»è¾é误è¦éè¿è°è¯ã
ããææ»ç»ï¼
çå®äºä¸é¢çæ¯è¾ï¼ä½ ç°å¨è¿è½åºå«ç¼è¯ä¸è°è¯å?å ¶å®ï¼åªè¦è®°ä½è¿å¥è¯ï¼“ç¼è¯å ³æ³¨è¯æ³é误ï¼è°è¯å ³æ³¨é»è¾é误ï¼å æç¼è¯ï¼åæè°è¯”ï¼å°±ä¸ä¼å¿äºä¸¤è çåºå«äºã
C语言中编译 生成 调试 测试 运行各是什么意思有什么区别
C语言中的编译、生成、调试调试、和编测试和运行各自代表不同的源码译阶段和活动,具体如下:
1. 编译:编译是调试将C语言源代码转换为目标代码的过程。在Visual C++(VC)中,和编lumion视角算法源码编译阶段会将源代码(.c文件)转换成目标文件(.obj文件),源码译这个过程称为编译。调试编译器检查源代码的和编语法错误,并生成可以被计算机执行的源码译中间代码。
2. 生成:生成通常指的调试是构建过程,这个阶段会使用链接器将编译后的和编目标文件与其他库文件链接起来,形成一个可执行的源码译程序。在VC中,调试生成阶段会创建PE(Portable Executable)格式的和编文件,如.exe可执行文件或.dll动态链接库。
3. 调试:调试是在程序运行时对程序进行的一系列检查和测试活动,旨在发现并修复程序中的错误。调试通常在IDE的调试器中进行,开发者可以单步执行代码,观察变量值,源码 补码 反码区别并找出代码中的问题。
4. 测试:测试是验证程序功能是否符合预期设计的阶段。它包括多种类型的测试,如单元测试、集成测试和系统测试。测试旨在确保程序的每个部分都能正确工作,并且整个系统满足预定的需求。
5. 运行:运行是指程序在计算机上实际执行的过程。在编译和链接后,可执行文件会被加载到内存中,并由操作系统执行,这时程序开始运行,执行其预定功能。
总结来说,C语言程序的开发过程中,编译是将源代码转换为目标代码,生成是创建最终可执行程序,调试是找出并修复错误,测试是验证程序的正确性,而运行是自适应代码源码程序执行的阶段。这些阶段共同确保了程序从设计到最终使用的完整性。
LLVM源码编译及调试
为了深入理解并实现LLVM源码的编译与调试,我们需要分步骤进行,逐一安装相关软件并配置环境。首先,安装cmake,这是构建过程的核心工具。 在Linux环境下,我们可以使用tar命令来下载并解压cmake的安装包。具体的步骤是:访问cmake官网,下载cmake-3..0-rc2-linux-x_.tar.gz。
使用tar命令解压文件:`tar xf cmake-3..0-rc2-linux-x_.tar.gz`。
将解压后的文件移到/usr/share目录,并重命名为cmake-3..0-rc2-linux-x_以方便访问。
创建软连接,将cmake-3..0-rc2-linux-x_/bin/cmake移动到/usr/bin目录,并重命名为cmake,确保它可以被直接调用。
然后,安装ninja,winform定时关机源码这是构建过程中高效的任务执行工具。使用git克隆ninja的源代码。
运行配置脚本以生成构建文件。
复制ninja到/usr/bin目录。
通过`ninja --version`检查ninja的安装情况。
接下来,安装Python、gcc和g++,这是构建LLVM环境的基本依赖。 之后,安装LLVM。我们可以通过git克隆LLVM项目并进行配置、构建和安装。克隆LLVM项目。
指定版本(例如,基于特定版本)。
切换到项目目录并使用cmake进行配置。
使用预先选择的构建系统(如Ninja)和选项进行构建。
执行构建并使用ninja命令进行编译。
调试LLVM源码涉及查看支持的有米广告源码后端target、使用前端编译器(clang)生成LLVM IR、使用LLVM工具(如llc)进行调试、并使用graphviz生成可视化图表。 在调试过程中,可以使用以下工具:查看各阶段DAG使用llvm-dis。
查看AMDGPU寄存器信息与指令信息使用llvm-tblgen。
通过上述步骤,您可以成功安装并配置LLVM源码的编译环境,并进行有效的调试与分析。C语言中编译生成调试测试运行各是什么意思有什么区别
C语言中,编译、生成、调试、测试和运行分别代表不同的阶段和目的:
1. 编译:编译过程涉及将C语言源代码转换成机器可执行的代码。在Visual C++(VC)中,这一步骤会将源代码(.c文件)编译成目标代码(.obj文件),这个过程称为编译。
2. 生成:生成步骤通常指的是链接过程,它将编译后的目标代码与其他库文件或模块合并,形成一个完整的可执行程序。在VC中,这涉及到将多个.obj文件和资源文件(.rc)合并,最终生成Windows系统下的可执行文件(.exe)或动态链接库(.dll)。
3. 调试:调试是在程序编写完成后,使用调试器来执行程序,以便分析程序的行为并找出错误。调试过程包括设置断点、单步执行、查看变量值等,目的是发现并修复程序中的问题。
4. 测试:测试是在调试阶段之后进行的,它涉及对程序进行各种输入数据的测试,以确保程序在不同的条件下都能正确运行。测试旨在验证程序的功能是否符合预期,并确保没有遗漏的错误或缺陷。
5. 运行:运行是指程序在计算机上实际执行的过程。经过编译、生成、调试和测试后,程序准备好运行,用户或系统可以执行它以完成特定的任务。
扩展资料:
C语言是一种广泛使用的程序设计语言,它因其高效性和灵活性而受到计算机专业人员和爱好者的青睐。编写C语言程序通常包括编写源代码,然后使用编译器将其转换为目标代码,最终生成可执行程序。随着程序规模的扩大,仅仅依靠编译功能已不足以满足开发需求,因此出现了集成了编辑、编译、连接、调试和运行等功能的C语言集成开发环境(IDE),如Turbo C、Borland C++和Visual C++等。
onnxruntime源码学习-编译与调试 (公网&内网)
在深入学习ONNX Runtime的过程中,我决定从1.版本开始,以对比与理解多卡并行技术。为此,我选择了通过`./tools/ci_build/build.py`脚本进行编译,而不是直接执行`build.sh`,因为后者并不直接提供所需的参数。在`build.py:::parse_arguments()`函数中,我找到了可选择的参数,例如运行硬件(CPU/GPU)、调试模式(Debug/Release)以及是否并行编译。我特别使用了`--skip_submodule_sync`,以避免因与公网不通而手动下载“submodule”,即`./cmake/external`文件夹下的依赖组件。这样可以节省每次编译时检查依赖组件更新的时间,提高编译效率。同时,我使用`which nvcc`命令来确定`cuda_home`和`cudnn_home`的值。
我的编译环境配置为gcc8.5.0、cuda.7和cmake3..1,其中cmake版本需要不低于3.,gcc版本则至少为7.0,否则编译过程中会出现错误。在编译环境的配置中,可以通过设置PATH和LD_LIBRARY_PATH来指定可执行程序和动态库的路径。对于手动下载“submodule”的不便,可以通过先在公网编译cpu版本,然后在编译开始阶段由构建脚本自动下载所有依赖组件并拷贝至所需目录来简化流程。
编译顺利完成后,生成的so文件并未自动放入bin目录,这可能是由于在安装步骤后bin目录下才会出现相应的文件。接下来,我进入了调试阶段,使用vscode进行调试,最终成功运行了`build/RelWithDebInfo/onnxruntime_shared_lib_test`可执行文件。
在深入研究ONNX Runtime的编译流程时,我发现了一个更深入的资源,它涵盖了从`build.sh`到`build.py`再到`CmakeList.txt`的编译过程,以及上述流程中涉及的脚本解析。对这个流程感兴趣的读者可以进行更深入的研究。
在编译过程中,我遇到了一些问题,如下载cudnn并进行安装,以及解决找不到`stdlib.h`的问题。对于找不到`stdlib.h`,我通过查阅相关文章和理解编译过程中搜索路径的逻辑,最终找到了解决方案。如果忽略这个问题,我选择在另一台机器上重新编译以解决问题。
在使用vscode调试时,我遇到了崩溃问题,这可能是由于vscode、gdb或Debug模式编译出的可执行文件存在潜在问题。通过逐步排除,我最终确定问题可能出在Debug模式编译的可执行文件上。这一系列的探索和解决过程,不仅加深了我对ONNX Runtime的理解,也提高了我的调试和问题解决能力。