C++工程中的各种文件
cmakelists.txt路径的技巧

cmakelists.txt路径的技巧(实用版3篇)目录(篇1)1.引言:介绍 cmakelists.txt 文件的重要性2.cmakelists.txt 文件的基本概念3.如何使用路径技巧优化 cmakelists.txt 文件4.实际案例:展示如何使用路径技巧优化 cmakelists.txt 文件5.总结:cmakelists.txt 文件路径技巧的优势和意义正文(篇1)引言:在 CMake 工程中,cmakelists.txt 文件是构建过程中的核心部分,它包含了所有构建步骤的指令。
学会如何有效地管理和组织cmakelists.txt 文件中的路径技巧,可以极大地提高构建效率。
本文将介绍一些有关 cmakelists.txt 文件路径技巧的知识,帮助大家更好地理解和应用这些技巧。
cmakelists.txt 文件的基本概念:cmakelists.txt 文件是 CMake 的构建系统中的一个重要组成部分,它包含了构建过程中所需的所有信息。
cmakelists.txt 文件通常分为三个部分:变量定义、构建规则和构建目标。
其中,变量定义用于设置各种参数,构建规则用于指定如何编译源文件,构建目标则定义了最终要构建的可执行文件。
如何使用路径技巧优化 cmakelists.txt 文件:为了提高 cmakelists.txt 文件的可读性和可维护性,我们可以使用以下路径技巧:1.使用相对路径:相对于项目根目录,使用相对路径可以使cmakelists.txt 文件更加简洁。
例如,如果要包含一个名为“include”的目录,可以使用“${PROJECT_DIR}/include”这样的相对路径。
2.使用 CMake 变量:CMake 提供了一些内置变量,可以用于表示项目中的路径。
例如,使用“${CMAKE_SOURCE_DIR}”表示项目源代码目录,使用“${CMAKE_BINARY_DIR}”表示项目可执行文件目录。
(最新蓝皮书表格)附录三 C类文件

附录三 C 类文件一、表格说明1.总说明(1)C 类表格分为工程通用表格、工程检测表格、土建工程表格、站内工艺安装工程表格、集输管道安装工程表格、球罐制造安装工程表格、锅炉安装工程表格、电气安装工程表格、自动化仪表安装工程表格、通信安装工程表格、道路桥梁工程表格和隧道工程表格12类。
(2)由于各地方建设行政管理部门对工程检测、锅炉安装、建筑工程表格样式有具体规定,为适应各地方基建行业相关要求,本手册中仅列出此3类表格的名称和编号,具体表格样式可执行工程所在地规定,或直接采用国家认可的有关机构出具的表格。
(3)由于行业特殊性,长输管道工程交工技术表格本手册未做规定。
(4)C 类表格编号及工程编号填写说明。
① 表格编号说明: ³³一³³同类表格顺序号表格专业分类编码(专业分类中两个关键字各取前一个拼音字母) 例如:TY-01为工程“通用”表格中的第一个表格。
② 表格中工程编号填写说明。
a.工程编号由分部、子分部、分类、顺序号4组代号组成,组与组之间应用横线隔开,具体编写如下:b.属于单位工程整体管理内容的资料,编号中的分部、子分部工程代号可用“00”代替。
c.同一厂家、同一品种、同一批次的施工物资用于两个分部、子分部工程时,资料编号中的分部、子分部工程代号可按主要使用部位填写。
(5)C 类表格应符合工程档案组卷要求。
除另有规定外,C 类表格的纸张尺寸为A4(297 mm ³210mm )版面,其页边距设置为左侧30mm ,上、下、右各为20mm ;左边界装订,字体为标准宋体字。
(6)检验批质量验收记录执行国家、地方和行业相关质量验收规范,根据主管部门对各专业检验批表格保存方法的相关要求进行归档。
(7)针对目前油气田地面工程常见的橇装设备,应区分两种情况进行管理。
第一类为签订采购合同,整体运送到现场的橇装设备,此类橇装设备应按照1台静止(或转动)设备进行管理,填写设备整体的验收及安装的相关资料表格;第二类为签订工程施工合同,由施工单位在现场将各分散设备、管道等元件组装成橇,此类橇装设备应按照工程施工进行管理,针对橇上的每一台单独设备、管道、电气及仪表设备填写验收及安装的相关资料表格。
GEL文件

GEL概述GEL(General Extension Language通用扩展语言)是一种类似于C 语言的一种解释性语言,它可以创建GEL函数,以扩展CCS用途。
GEL是C语言的一个子集,然而它不能声明主机变量,所有的变量必须在DSP程序中定义,存在于仿真/实际目标板中,唯一不在目标板上定义的标识符是GEL函数及其参数。
GEL函数可在任何能键入C表达式的地方调用,既可以在任何可键入C表达式的对话框中调用,也可以在其他GEL函数中调用;但不支持递归。
在实际应用中,用户只需要要按照GEL的语法,建立GEL文件并将其加载到CCS中。
加载GEL文件后,为GEL菜单增加新的功能选项,这给调试程序时自动测试以及用户自定义工作空间带来很大方便。
注意:GEL对于硬件仿真环境是没有太大用处的,但在软件仿真环境下,GEL可以为用户产生一个虚拟的DSP硬件初始化环境。
1、在GEL菜单中添加GEL函数在一个工程项目中,可以将常用的GEL函数添加到CCS的GEL菜单下,此时需要使用menuitem关键词在GEL菜单下创建一个新的下拉菜单列表(一级菜单),再使用hotmenu,dialog和slider等关键词,在该菜单项中添加新的菜单项(二级菜单)。
2、GEL文件的加载和卸载对于包含一个或多个GEL函数的文件(.gel),编写好后,必须将其加载到CCS中才能调用GEL文件中的GEL函数。
有两种加载GEL 文件的方法:②选择File→Load GEL菜单项,从文件夹中选择GEL文件加载。
②在工程窗口中,右击GEL File文件夹,在弹出的快捷菜单中选择Load GEL,然后从文件夹中选择GEL文件加载。
GEL文件一旦加载,其中的GEL函数将一直驻留在内存中,直到将其卸载为止。
当一个加载的GEL文件更改后,必须先将其卸载,然后再重新加载才能使更改生效。
GEL文件的卸载很简单,右击欲卸载的GEL文件名,从弹出的局势菜单中选择Remove就可以了。
实验 2 使用IAR建立工程并加入C文件

实验2(1) IAR for 8051 工程的创建理论回顾CC2530 单片机的代码开发均在IAR for 8051 上完成,因此要实现CC2530 单片机代码的开发就必须掌握IAR for 8051 开发环境的CC2530 单片机工程建立。
并加深对IAR for 8051 开发环境的了解。
实验目标2530 简易工程建立。
2.简易工程下载到CC2530 单片机查看运行效果。
实验环境硬件环境:PC 机Pentium 处理器双核2GHz 以上,内存4GB 以上操作系统:Windows7 64 位及以上操作系统开发环境:IAR for 8051 安装包实验器材:xLab 未来实验平台Lite 节点、CC2530 核心板实验配件:xLab 未来实验平台SmartRF 仿真器、12V 电源实验步骤1.创建原始工程1)打开IAR 开发环境,在菜单栏中通过点击File -> New -> Workspace 完成新工程的创建。
2)当Workspace 创建完成后IAR 将会产生一个空窗口。
3)点击Project -> Create New Project,Tool chain 中选择8051 内核单片机,然后点击”确认“创建一个新项目,设置文件名称后保存文件。
4)当新项目建立完成后IAR 将会在File 中产生一个创建的文件目录。
5)点击左上角的New document,代码框中会显示出一个空白的临时文件。
6)点击空白的临时空间后点击File -> Save As 将文件重新命名后保存到与之前创建保存的Workspace 相同文件夹中。
2.添加工程源码1)通过右键创建好的Project –> Add -> Add Files…找到创建的.C 文件,点击打开后,将创建好的C 文件加入到工程中。
2)当.C 文件添加完成后Files 框中就会显示加入到工程中的.C 文件名称,点击.C 文件可以打开加入到工程的文件。
工程档案管理制度考试试题

一、单项选择题(每题2分,共20分)1. 工程档案是指工程项目在建设过程中形成的各种文件、图纸、照片、声像等资料的总称,以下哪项不属于工程档案的范畴?A. 设计文件B. 施工图纸C. 质量验收报告D. 项目可行性研究报告2. 以下关于工程档案管理制度的说法,正确的是:A. 工程档案管理制度应由建设单位自行制定B. 工程档案管理制度应与国家档案管理法规相一致C. 工程档案管理制度可由施工单位制定,无需上报主管部门D. 工程档案管理制度应由设计单位制定,报监理单位审核3. 工程档案的收集工作,下列哪项不属于其范围?A. 收集设计文件、施工图纸等原始资料B. 收集施工过程中的变更文件、验收报告等C. 收集工程项目的审批文件、合同等D. 收集工程项目竣工后的使用、维护资料4. 工程档案的整理工作,以下哪项不属于其基本要求?A. 按照时间顺序排列B. 按照文件类型分类C. 按照项目阶段划分D. 按照文件重要程度排序5. 工程档案的保管工作,以下哪项不属于其基本要求?A. 设置专门的档案室B. 按照国家档案管理法规进行分类存放C. 定期对档案进行整理、归档D. 允许档案随意借阅、复印6. 工程档案的利用工作,以下哪项不属于其范围?A. 为工程项目提供参考依据B. 为工程项目验收提供资料C. 为工程项目维护提供指导D. 为工程项目投资决策提供参考7. 工程档案的归档时间,以下哪项是正确的?A. 工程项目竣工后立即归档B. 工程项目验收合格后立即归档C. 工程项目投入使用后立即归档D. 工程项目结算完毕后立即归档8. 工程档案的归档范围,以下哪项不属于其范畴?A. 工程项目设计文件B. 工程项目施工图纸C. 工程项目验收报告D. 工程项目合同9. 工程档案的数字化工作,以下哪项不属于其基本要求?A. 对档案进行扫描、转换B. 对档案进行加密、解密C. 对档案进行备份、恢复D. 对档案进行分类、整理10. 工程档案的保密工作,以下哪项不属于其基本要求?A. 对涉密档案进行标识B. 对涉密档案进行保管C. 对涉密档案进行复制、传播D. 对涉密档案进行审查、批准二、多项选择题(每题3分,共15分)1. 工程档案管理制度的主要内容包括:A. 档案收集制度B. 档案整理制度C. 档案保管制度D. 档案利用制度E. 档案数字化制度2. 工程档案收集工作的要求包括:A. 完整性B. 及时性C. 准确性D. 保密性E. 真实性3. 工程档案整理工作的要求包括:A. 按照时间顺序排列B. 按照文件类型分类C. 按照项目阶段划分D. 按照文件重要程度排序E. 按照国家档案管理法规进行分类存放4. 工程档案保管工作的要求包括:A. 设置专门的档案室B. 按照国家档案管理法规进行分类存放C. 定期对档案进行整理、归档D. 允许档案随意借阅、复印E. 对档案进行备份、恢复5. 工程档案利用工作的要求包括:A. 为工程项目提供参考依据B. 为工程项目验收提供资料C. 为工程项目维护提供指导D. 为工程项目投资决策提供参考E. 为工程项目招标、投标提供资料三、判断题(每题2分,共10分)1. 工程档案管理制度应与国家档案管理法规相一致。
LabWindowsCVI(一):各文件类型的含义及初始项目的搭建

LabWindowsCVI(⼀):各⽂件类型的含义及初始项⽬的搭建1、基本定义虚拟仪器(VI)是计算机技术、仪器技术和通信技术相结合的产物。
虚拟仪器的⽬的是利⽤计算机强⼤资源使硬件技术软件化,分⽴元件模块化,降低程序开发的复杂程度,增强系统的功能和灵活性LabWindows/CVI是⼀个完全的ANSI C开发环境,⽤于仪器控制、⾃动检测、数据处理的应⽤软件使⽤LabWindows/CVI设计的应⽤程序可以脱离LabWindows/CVI开发环境独⽴运⾏,并可以打包⽣成.msi安装⽂件LabWindows/CVI主要采⽤事件驱动与回调函数⽅式,编程⽅法简单易学LabWindows/CVI⽂件类型⼯作空间⽂件(*.cws)通常包含的⽂件类型有如下六种:1、*.prj ⼯程⽂件是⼯程的主体框架,主要由*.uir⽂件、*.c⽂件、*.h⽂件组成。
程序调试运⾏后,可以⽣成可执⾏⽂件(*.exe)2、*.c C源程序。
他主要包含头⽂件、主程序⽂件和回调函数,其结构和C语⾔结构⼀致3、*.uir ⽤户界⾯⽂件,即⾯板⽂件。
该⽂件中包括菜单和各种控件资源4、*.h 在LabWindows/CVI中,头⽂件是由系统⾃动⽣成的。
它的作⽤⼀⽅⾯是便于打开和编辑,另⼀⽅⾯是确保编译器在编译时能引⽤它们5、*.fp 当打开⼯程的仪器驱动函数⾯板⽂件时,LabWindows/CVI⾃动加载仪器驱动⽂件6、*.lib 这类⽂件可能是DLL导⼊库⽂件,也可以是静态库⽂件2、构建⼀个简单程序1、建⽴⼯程⽂件 ——> (*.prj)File ——> New ——> Project(*.prj) 默认⽂件名为untitledFlie ——> Save Untitled Project As ... 保存新建的⼯程⽂件 (重命名)2、创建⽤户界⾯⽂件 ——> (*.h ,*.uir)(1) 创建空⾯板窗⼝File ——> New ——> User Interface(*.uir)(2) 向⾯板中添加控件点击⾯板,菜单栏出现 Create ,点击 Create 选择相应的控件进⾏添加或在⾯板右击选择添加(3) 保存File ——> Save Untitled.uir (重命名)3、⽣成源代码⽂件:(1)、⽣成全部源代码框架 (*.cws ,*.exe ,*.c ,cvibuild.项⽬名)Code ——> Generate——> All Code(2)、主函数及回调函数分布⽣成 ——> (*.c)a、⽣成主函数:Code ——> Generate ——> Mainb、保存⽂件Edit ——> Add Files to Project ——> Source(*.c) 把⽂件添加到该⼯程中来c、⽣成回调函数源代码框架i、⽤户界⾯菜单:Code ——> Preference ——> Default Control Events弹出控件回调事件对话框,选择该控件所要响应的事件,点击OK键ii、右击需要产⽣回调函数的控件选择 Generate Control Callback。
C类工程文件表格

附录三C类文件一、表格说明1.总说明(1)C类表格分为工程通用表格、工程检测表格、土建工程表格、站内工艺安装工程表格、集输管道安装工程表格、球罐制造安装工程表格、锅炉安装工程表格、电气安装工程表格、自动化仪表安装工程表格、通信安装工程表格、道路桥梁工程表格和隧道工程表格12类。
(2)由于各地方建设行政管理部门对工程检测、锅炉安装、建筑工程表格样式有具体规定,为适应各地方基建行业相关要求,本手册中仅列出此3类表格的名称和编号,具体表格样式可执行工程所在地规定,或直接采用国家认可的有关机构出具的表格。
(3)由于行业特殊性,长输管道工程交工技术表格本手册未做规定。
(4)C类表格编号及工程编号填写说明。
①表格编号说明:××一××同类表格顺序号表格专业分类编码(专业分类中两个关键字各取前一个拼音字母)例如:TY-01为工程“通用”表格中的第一个表格。
②表格中工程编号填写说明。
a.工程编号由分部、子分部、分类、顺序号4组代号组成,组与组之间应用横线隔开,具体编写如下:b.属于单位工程整体管理内容的资料,编号中的分部、子分部工程代号可用“00”代替。
c.同一厂家、同一品种、同一批次的施工物资用于两个分部、子分部工程时,资料编号中的分部、子分部工程代号可按主要使用部位填写。
(5)C类表格应符合工程档案组卷要求。
除另有规定外,C类表格的纸张尺寸为A4(297 mm×210mm)版面,其页边距设置为左侧30mm,上、下、右各为20mm;左边界装订,字体为标准宋体字。
(6)检验批质量验收记录执行国家、地方和行业相关质量验收规范,根据主管部门对各专业检验批表格保存方法的相关要求进行归档。
(7)针对目前油气田地面工程常见的橇装设备,应区分两种情况进行管理。
第一类为签订采购合同,整体运送到现场的橇装设备,此类橇装设备应按照1台静止(或转动)设备进行管理,填写设备整体的验收及安装的相关资料表格;第二类为签订工程施工合同,由施工单位在现场将各分散设备、管道等元件组装成橇,此类橇装设备应按照工程施工进行管理,针对橇上的每一台单独设备、管道、电气及仪表设备填写验收及安装的相关资料表格。
C++Builder+6的文件和文件夹操作

.cnbook 结果说明: ww str="E:\Progra~1\Micros~1\你好世界~1.doc" ; w t 2. 常用的文件、文件夹管理函数 e C++Builder 6 还提供了文件管理函数来进行设置和读取驱动器、子目录和文件的生成与删除等 t .n 各种操作。下面列出这类操作常用的函数及其功能。 ne ok (1)GetCurrentDir():取得当前的目录名。 . o (2)SetCurrentDir():设置当前目录。 ok nb (3)DirectoryExists():判断目录是否存在。 .c (4)FileExists():判断文件是否存在。 ww (5)FileCreate():创建新的文件。 w (6)CreateDir():创建新的子目录。 et (7)DeleteFile():删除文件。 t .n (8)RemoveDir():删除目录。 e k 详细介绍如下: .n oo 1)GetCurrentDir() ok nb 函数原型: o c AnsiString __fastcall GetCurrentDir(); nb w. 函数功能: .c ww 取得当前的目录名。 t 使用范例: ne String str=GetCurrentDir(); et k. 结果说明: n o str 取得当前的目录名,注意随着文件对话框的打开,当前目录随着改变为所选择的文件所在的 k. bo 目录。 oo cn 2)SetCurrentDir() b . 函数原型: cn ww bool__fastcall SetCurrentDir(const AnsiString Dir); . w 函数功能: ww 设置当前目录,如果成功返回 true,否则返回 false。 w 参数说明: net ok Dir:要设置为当前目录的目录名。 . o 使用范例: ok nb SetCurrentDir("C:\\WINDOWS"); bo .c 结果说明: n w 将"C:\\WINDOWS"设为当前目录,注意创建文件,删除文件,查找文件时如果没有指定文件路 .c ww 径,则适用范围就是当前目录下的文件。 w 3)DirectoryExists() ww 函数原型: t bool __fastcall DirectoryExists(const AnsiString Name); ne 函数功能: k. 检测目录是否存在,如果存在返回 true,否则返回 false。 oo c 参数说明: nb w. Name:要检测的目录名。 .c ww 使用范例:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c/c++工程中的各种文件【转】
lib是和dll对应的。
lib是静态链接库的库文件,dll是动态链接库的库文件。
所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。
所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。
lib,dll,exe都算是最终的目标文件,是最终产物。
而c/c++属于源代码。
源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目标文件。
比如说一个exe需要很多的cpp文件生成。
而编译器一次只能编译一个cpp文件。
这样编译器编译好一个cpp 以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要的exe,应该说缺少任意一个obj都会导致exe的链接失败。
1.obj里存的是编译后的代码跟数据,并且有名称,所以在连接时有时会出现未解决的外部符号的问题。
当连成exe后便不存在名称的概念了,只有地址。
lib就是一堆obj的组合。
2.理论上可以连接obj文件来引用其他工程(可以认为一个obj文件等价于编译生成它的cpp文件,可以引用obj来替换cpp,也可以添加cpp来替换obj ),但实际中通常用lib来实现工程间相互引用。
3.编译器会默认链接一些常用的库,其它的需要你自己指定。
lib和DLL的区别
(1)lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2) 一般的动态库程序有lib文件和dll文件。
lib文件是必须在编译期就连接到应用程序中的,而dll 文件是运行期才会被调用的。
如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。
如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。
静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。
但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件(实际上也算是一个静态库,只是在链接时只能把函数在DLL的入口链接到exe中,而不像真正静态链接库那样将函数体真正链接到exe 中,通过lib进行的动态链接实际上也使用了静态链接来实现),一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。
从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
DLL内的函数分为两种:
(1)DLL导出函数,可供应用程序调用;
(2)DLL内部函数,只能在DLL程序使用,应用程序无法调用它们
创建静态链接库和创建动态链接库
VC6中创建[Win32 Dynamic-Link Library]工程便可以创建出一个空的DLL工程.
VC6中创建[Win32 Static Library]工程便可以创建出一个空的LIB工程(静态链接库工程,仅生成一个lib文件).
添加lib文件的常用办法有二个:
1、把*.lib放在VC的Lib目录中
2、修改project setting的Link->Input中的Addtional library path,加入你的目录dll:是可实际运行的二进制代码,有定位代码的!
3、也可以在object/library中直接写上lib文件路径.(这里实际上是可以写上任意obj文件或者lib 文件的).
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成LIB文件。
如果要完成源代码的编译和链接,有头文件和lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
.h .lib .dll三者的关系
H文件作用是:声明函数接口
DLL文件作用是: 函数可执行代码
当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项 .LIB文件,它起到桥梁的作用。
如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在lib文件中
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。
静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。
比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。
动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary 调入DLL文件,然后再手工GetProcAddress获得对应函数了。
有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。
导入库和静态库的区别很大,他们实质是不一样的东西。
静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。
【注】以上内容均只从简单的易理解的角度阐述了各个文件的关系。
若要了解详情,请参阅《程序员的自我修养——链接、装载与库》和《链接器与加载器》。