WDK编译环境配置说明

合集下载

客户端编译环境说明

客户端编译环境说明

一、软件1)VS2013(C++11特性在VS2012以上可以使用);传送门:2)Cocos2d-x 代码的版本是3.123)JDK;传送门:1.84)NDK;传送门:NDK_11E5)ANT;传送门:1.9.76)Python;传送门:2.7二、软件安装与环境配置1、VS环境安装2、JDK环境安装:右击计算机->属性->高级系统设置->环境变量(分为用户变量和系统变量);1)安装:直接点击下一步即可安装完成。

2)配置环境变量:a)在系统或用户变量中新加环境变量JAVA_HOME为JDK的路径,如:E:/Java,java为JDK安装文件夹;b)把”%JAVA_HOME%/bin”加入到系统变量的Path 中,记得用分号隔开。

在用户变量中添加CLASSPATH变量为“.;%JAVA_HOME%/lib;”注意前面还有个点。

JDK环境配置完成。

3)开始->运行->cmd或win+R进入DOS窗口:输入java -version查看JDK是否安装成功。

重启DOS窗口,环境配置成功。

3、ANT环境安装:1)解压apache-ant-1.9.3-bin.zip,ant是一个批处理工具;2)设置ANT_ROOT,如:E:/cocos/apache-ant-1.9.3/bin,bin是我ant安装目录下的bin文件夹,ANT_ROOT环境变量在系统用户中添加3)把“%ANT_ROOT%”加入到系统变量Path中,记得分号隔开。

4、ADT环境安装(包括SDK和Eclipse)1)解压adt-bundle-windows-x86-20140624.zip;2)设置ANDROID_SDK_ROOT环境,系统变量中增加。

值如:”E:/cocos/adt-bundle-windows-x86-20140624/sdk“;3)把“%ANDROID_SDK_ROOT%/tools”和“ANDROID_SDK_ROOT%/platform-tools“加入系统Path变量中,记得分号隔开。

XP+VS2008+WDK7600驱动开发环境搭建

XP+VS2008+WDK7600驱动开发环境搭建

选择“系统”,“子系统”选“本机(/SUBSYSTEM:NATIVE)”,“堆栈保留大小”输入“40000”,“堆栈提交大小”输入“1000”,“驱动程序”选“驱动程序(/DRIVER)”
选择“高级”,“入口点”输入“DriverEntry”,“基址”输入“0x10000”,“随机基址”选“默认值”,“数据执行保护(DEP)”选“默认值”,“目标计算机”选“MachineX86 (/MACHINE:X86)”
A.点击“c/c++”--
选择“常规”,“调试信息”选:“C7 兼容(/Z7)”,“警告等级”--“3级(/w3)”,“将警告视为错误”--选“是”
选择“优化”,“优化”选“禁用(/0d)”
选择“预处理器”,“预处理器定义”输入“WIN32=100;_X86_=1;DBG=1”
C:\WINDDK\7600.16385.1\lib\wdf\kmdf\i386\1.9
C:\WINDDK\7600.16385.1\lib\wxp\i386
(2)选择“新建项目”中的“win32控制台应用程序”或者“win32项目”,输入项目名称后点击“确定”,进入“win32应用程序向导”,选择“空项目”点击“完成” 。然后将你自己的Driver.cpp和Driver.h加入项目。
/downloads/details.aspx?displaylang=en&FamilyID=d95598d7-aa6e-4f24-82e3-81570c5384cb
2.安装WDK7600,也是从微软官方下载
/downloads/details.aspx?displaylang=en&FamilyID=2105564e-1a9a-4bf4-8d74-ec5b52da3d00

Windows平台下机群并行编译环境配置

Windows平台下机群并行编译环境配置
并行计算程序的运行也可以在IX)S命令窗口下 执行。为了方便在DOS命令窗口下运行并行程序,要 先设置一下环境变量。在桌面上右击我的电脑一>属 性一>高级选项卡一>环境变量,打开环境变量对话 框。在环境变量对话框上面的当前用户变量列表里如 果已经有path变量可点编辑(如果没有path变量可点 新建,在变量名里输入path),在变量值里输人 MPICH2安装目录下bin子目录的路径,如C:\Pro。 gramFiles\MPICH2\bin,确定所有窗口,如图6所 示。然后点开始菜单一>运行,输入cmd运行打开
O引 言 随着技术的发展,许多工程对计算工作量的要求
也越来越高,单一的处理机已经不能满足工程计算的 需要。而多个处理器协同运行极大地提高了计算速 度,能够满足对大规模计算工作量的需求,目前常见的 并行机主要有P、伊(Parallel Vector Processor,并行向量
处理机)、SⅧ(Shared MeHale Waihona Puke ory Processor,共享内存多
摘要:现行的并行计算多是在Linu)【平台下进行的,为了能够在Windows平台下进行机群并行计算,以Fortran90为开发
语言,介绍了Windows XP平台下MPICH2的Fortram00并行编译环境的配置,并进一步介绍在MPICH2环境下Fortran90
并行程序的编译、连接和运行方法,从而实现了Windows平台下机群的并行计算。
从MPICH网站(http://www—unix.111CS.anl. gov/mpi/mpich/)P_-F载MPICH2的Windows版本,现 在最高版本为mpich2—1.0.3,可以根据情况选择下 载32位系统或64位系统的MPICH2安装软件。 1.2安装MPICIt2

WINDOWS 7 配置驱动开发环境(wdk7.60)

WINDOWS 7 配置驱动开发环境(wdk7.60)

WINDOWS 7 配置驱动开发环境(wdk7.60)1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1)2. 新建VC 控制台项目(选择为空项目)3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器)输入名称(Driver Debug)点击确定就可以了,其他的不要动哦!完成后的效果!点击确定按钮之后呈现出来的画面鼠标右击工程选择属性,会弹出以下窗口!4. 设置VC++路径<我把wdk安装在E盘下>a. 配置可执行文件目录:E:\WinDDK\7600.16385.1\bin\x86;b. 配置包含目录:E:\WinDDK\7600.16385.1\inc\ddkE:\WinDDK\7600.16385.1\inc\E:\WinDDK\7600.16385.1\inc\apic. 配置库目录: E:\WinDDK\7600.16385.1\lib\win7\i3865新建C/C++文件不然无C/C++设置选项<刚开始我们创建了一个空的项目所以项目里没有c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件>常规目标文件扩展名:.sys //必选6. 设置C/C++选项常规选项卡1 调试信息格式(C7 兼容(/Z7) //可选2 警告等级(2 级(/W2) //可选3 将警告视为错误(是(/wx) //可选优化选项卡优化(禁用/Od) //可选预处理器预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必选如果是Release,那么可想而知,不需要DBG=1代码生成启用最小重新生成:否//可选基本运行时检查:默认值//可选运行时库:多线程调试(/MTd) 或多线程(/MT) //建议选<本人选择的是多线程调试(/MTd)>缓冲区安全检查:否//可选(可避免出现LINK : error LNK2001: 无法解析外部符号__security_cookie)高级调用约定__stdcall(/Gz) //必选7. 链接器设置常规启用增量链接:否(/INCREMENTAL:NO) //建议选上忽略导入库:是// 可选( 设置为此值时,必须在附加库目录中加:E:\WinDDK\7600.16385.1\lib\win7\i3865 这样项目就不会依赖IDE 环境的设置)如果否( 设置为此值时,将依赖IDE 的环境的相关设置)输入附加依赖项ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB //必选//NT式驱动ntoskrnl.lib WDM式驱动wdm.lib( HalXXX 函数在Hal.lib,WmiXXX 函数在wmilib.lib ,NdisXXX函数在ndis.lib ) ( 必要时需要增加微软的标准库MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库) )( 如果源码中有source 文件,那么该文件的TARGETLIBS 字段会列出该项目需要的库)忽略所有默认库:是(/NODEFAULTLIB) //必选清单文件:启用用户账户控制(UAC)否//必选不然会出现>LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”调试:生成调试信息是(/DEBUG) //可选生成映像文件:是(/MAP) //可选映像文件名:$(TargetDir)$(TargetName).map //可选系统(System)子系统: 控制台(/SUBSYSTEM:CONSOLE) //必选堆栈保留大小:4194304 //可选堆栈提交大小:4096 //可选驱动程序: 驱动程序(/DRIVER) //必选高级:入口点:DriverEntry //必选随机基址:清空//把框里的数据删掉。

Windows驱动程序开发环境配置

Windows驱动程序开发环境配置

Windows驱动程序开发笔记一、WDK与DDK环境最新版的WDK 微软已经不提供下载了这里:https:/// 可以下并且这里有好多好东东!不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序,但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题.上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。

解决办法:去掉build路径中的空格。

二、下载 WDK 开发包的步骤1、访问Microsoft Connect Web site站点2、使用微软 Passport 账户登录站点3、登录进入之后,点击站点目录链接4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。

WDK编译环境配置说明

WDK编译环境配置说明

客户端DDK编译环境配置说明概要文档主要说明DDK编译环境的部署,如何使用该环境进行客户端代码的编译,环境中一些主要命令、如何扩展一些命令。

以及在从VC环境下移植过来后,代码需要改进的一些描述。

文章将着重对相关模块下的sources makefile进行描述。

主要分以下五个部分,各个部分的详细叙述请参见各章节。

1.DDK build server的部署2.DDK环境目录的介绍3.DDK编译工具和操作介绍4.编译过程描述以及tang工程编译分析5.VC源代码移植一些常见编译错误6.一些遗留移植和完善工作DDK build server的部署DDK build server是指存在ddk build环境的服务器,可供每个开发人员下载到自己的开发机器,经过简单的配置就能成为本地ddk编译换进的一套机制。

DDK build server可供公司各个项目组使用,方便的下载,配置并执行编译功能。

目前没有ddk build server部署,大家可以从机器192.168.12.103的共享目录中进行下载。

DDK环境目录的介绍从上图中可以看到红圈标识的几个文件和文件夹,下面一一进行介绍:Bin目录:包含了对应系统平台下的整个环境的工具和编译命令,已经进行环境设置的bat 等。

例如:cl.exe,mc.exe,midl.exe,rc.exe包括编译命令build.exe等。

Inc目录:包含了整个环境中的头文件,其中包含的子目录crt,atl,wtl,ddk,api,mfc等包含了各种不同编程框架,crt以及系统sdk的头文件。

各个子目录都,对应与相应的环境变量一一对应:Crt $( CRT_INC_PATH) = ddk下载目录\inc\crtSdk $( SDK_INC_PA TH)= ddk下载目录\inc\apiWtl $( WTL_INC_PA TH)= = ddk下载目录\inc\wtl80…Lib目录:包含了整个编译环境下的所有lib文件(除用户lib),其中包含的子目录atl,crt,mfc,以及不同操作系统对应的库目录。

windows7WDK配置

windows7WDK配置

. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1)2. 新建VC 控制台项目(选择为空项目)3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器)输入名称(driver)点击确定就可以了,其他的不要动哦!完成后的效果!点击确定按钮之后呈现出来的画面鼠标右击新建的driver属性,会弹出以下窗口!4. 设置VC++路径<我把wdk安装在E盘下>a. 配置可执行文件目录:E:\WinDDK\7600.16385.1\bin\x86;b. 配置包含目录:E:\WinDDK\7600.16385.1\inc\ddkE:\WinDDK\7600.16385.1\inc\crtE:\WinDDK\7600.16385.1\inc\apic. 配置库目录: E:\WinDDK\7600.16385.1\lib\win7\i3865新建C/C++文件不然无C/C++设置选项<刚开始我们创建了一个空的项目所以项目里没有c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件>常规目标文件扩展名:.sys //必选6. 设置C/C++选项常规选项卡1 调试信息格式(C7 兼容(/Z7) //可选2 警告等级(2 级(/W2) //可选3 将警告视为错误(是(/wx) //可选优化选项卡优化(禁用/Od) //可选预处理器预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必选代码生成启用最小重新生成:否//可选基本运行时检查:默认值//可选运行时库:多线程调试(/MTd) 或多线程(/MT) //建议选 <本人选择的是多线程调试(/MTd)>缓冲区安全检查:否//可选(可避免出现LINK : error LNK2001: 无法解析外部符号__security_cookie)高级调用约定__stdcall(/Gz) //必选7. 链接器设置常规启用增量链接:否(/INCREMENTAL:NO) //建议选上忽略导入库:是// 可选( 设置为此值时,必须在附加库目录中加:E:\WinDDK\7600.16385.1\lib\win7\i3865 这样项目就不会依赖IDE 环境的设置)如果否( 设置为此值时,将依赖IDE 的环境的相关设置)输入附加依赖项ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB //必选//NT式驱动ntoskrnl.lib WDM式驱动wdm.lib( HalXXX 函数在Hal.lib,WmiXXX 函数在wmilib.lib ,NdisXXX函数在ndis.lib ) ( 必要时需要增加微软的标准库MSVCRT.LIB MSVCRTD.LIB(调试库)LIBCMT.LIBIBCMTD.LIB(调试库) )( 如果源码中有source 文件,那么该文件的TARGETLIBS 字段会列出该项目需要的库)忽略所有默认库:是(/NODEFAULTLIB) //必选清单文件:启用用户账户控制(UAC)否//必选不然会出现>LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”调试:生成调试信息是(/DEBUG) //可选生成映像文件:是(/MAP) //可选映像文件名:$(TargetDir)$(TargetName).map //可选系统(System)子系统: 控制台(/SUBSYSTEM:CONSOLE) //必选堆栈保留大小:4194304 //可选堆栈提交大小:4096 //可选驱动程序: 驱动程序(/DRIVER) //必选高级:入口点:DriverEntry //必选随机基址:清空//把框里的数据删掉。

Windows 7 + Visual 2010 + WDK 7600.16385.1 配置方法

Windows 7 + Visual 2010 + WDK 7600.16385.1 配置方法

Windows 7 + Visual 2010 + WDK 7600.16385.1 配置方法1. 新建一个空DLL项目2. 增加一个主程序文件,如entry.c3. 找到配置管理器,添加一个新的配置叫做Driver Debug(以后还可以再设置一个Driver Release),如图4. 在属性管理器上找到Driver Debug,右键菜单中找到“属性”,开始配置5. 在“常规”选项卡中5.1 目标文件扩展名:修改为.sys5.2 清除时要删除的扩展名:添加一个*.sys,其他继承原来的系统设置6. “VC++目录”选项卡中6.1 可执行文件目录:添加一条F:\WinDDK\7600.16385.1\bin\x866.2 包含目录:添加三条,分别为F:\WinDDK\7600.16385.1\incF:\WinDDK\7600.16385.1\inc\apiF:\WinDDK\7600.16385.1\inc\ddk6.3 库目录:添加一条F:\WinDDK\7600.16385.1\lib\win7\i3867. “C/C++” 选项卡中7.1 预处理器:“预处理器定义” 添加定义WIN32=100;_X86_=1;WINVER=0x501;DBG=1如果是Release,那么可想而知,不需要DBG=17.2 高级:“ 调用约定” 修改为__stdcall(/Gz)7.3 常规:“警告等级”设置为/W4 将警告视为错误选为是/WX其他为建议可选项目优化:优化选项可以选择为已禁用/Od代码生成:缓冲区安全检查否8. “链接器” 选项卡中8.1 输入:在“附加依赖项”中输入ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LI BCMT.LIB把“忽略所有默认库” 选择为是(/NODEFAULTLIB)8.2 清单文件:启用用户账户控制(UAC)否否则会出现“/MANIFESTUAC”与“/DRIVER”规范不兼容8.3 系统:“子系统” 选择为控制台(/SUBSYSTEM:CONSOLE)“驱动程序” 选择为驱动程序(/DRIVER)8.4 高级:“入口点” 输入为DriverEntry“基址” 输入为0x10000把“随机基址” 中原来的是(/DYNAMICBASE) 内容删掉,只留下空的文本框,因为“/DYNAMICBASE”与“/DRIVER”规范不兼容把“数据执行保护(DEP)” 中原来的是(/NXCOMPAT:NO) 内容删除,只留下空的文本框,因为“/NXCOMPAT:NO”与“/DRIVER”规范不兼容8.5 调试:根据当前是Driver Debug 还是Driver Release 选择是否生成调试信息是(/DEBUG)8.6 命令行:添加一段/SECTION:INIT,D /IGNORE:4078这样可以防止出现4078的警告【找到多个“INIT”节,它们具有不同的属性(E2000020)】其他为可以选择的选项常规:“启用增量链接” 可以设置为否(/INCREMENTAL:NO) 建议选上这样编译环境就设置完成了,还可以再添加一个Driver Release 版本,去掉调试信息但是,这样设置还是会有一堆编译错误,如:C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): errorC2143: syntax error : missing ')' before 'const'C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2143: syntax error : missing '{' before 'const'C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2059: syntax error : ','C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2059: syntax error : ')'C:\Program Files\Microsoft Visual Studio 10.0\VC\include\excpt.h(56): error C2143: syntax error : missing ')' before 'type'那么这时候需要拷贝F:\Program Files (x86)\Microsoft Visual Studio10.0\VC\include\sal.h,然后覆盖掉F:\WinDDK\7600.16385.1\inc\api\sal.h这样就会导致另外一个问题,Microsoft Visual Studio 10.0\VC\include\sal.h中include 了CodeAnalysis\sourceannotations.h,所以如果在编译环境中调用build,会出现错误找不到sourceannotations.h,所以要:把Microsoft Visual Studio10.0\VC\include\CodeAnalysis拷贝到F:\WinDDK\7600.16385.1\inc\api 下!!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

客户端DDK编译环境配置说明概要文档主要说明DDK编译环境的部署,如何使用该环境进行客户端代码的编译,环境中一些主要命令、如何扩展一些命令。

以及在从VC环境下移植过来后,代码需要改进的一些描述。

文章将着重对相关模块下的sources makefile进行描述。

主要分以下五个部分,各个部分的详细叙述请参见各章节。

1.DDK build server的部署2.DDK环境目录的介绍3.DDK编译工具和操作介绍4.编译过程描述以及tang工程编译分析5.VC源代码移植一些常见编译错误6.一些遗留移植和完善工作DDK build server的部署DDK build server是指存在ddk build环境的服务器,可供每个开发人员下载到自己的开发机器,经过简单的配置就能成为本地ddk编译换进的一套机制。

DDK build server可供公司各个项目组使用,方便的下载,配置并执行编译功能。

目前没有ddk build server部署,大家可以从机器192.168.12.103的共享目录中进行下载。

DDK环境目录的介绍从上图中可以看到红圈标识的几个文件和文件夹,下面一一进行介绍:Bin目录:包含了对应系统平台下的整个环境的工具和编译命令,已经进行环境设置的bat 等。

例如:cl.exe,mc.exe,midl.exe,rc.exe包括编译命令build.exe等。

Inc目录:包含了整个环境中的头文件,其中包含的子目录crt,atl,wtl,ddk,api,mfc等包含了各种不同编程框架,crt以及系统sdk的头文件。

各个子目录都,对应与相应的环境变量一一对应:Crt $( CRT_INC_PATH) = ddk下载目录\inc\crtSdk $( SDK_INC_PA TH)= ddk下载目录\inc\apiWtl $( WTL_INC_PA TH)= = ddk下载目录\inc\wtl80…Lib目录:包含了整个编译环境下的所有lib文件(除用户lib),其中包含的子目录atl,crt,mfc,以及不同操作系统对应的库目录。

各个子目录与相应的环境变量一一对应:Crt $(CRT_LIB_PA TH)= ddk下载目录\lib\crt\*Sdk $( SDK_LIB_PATH)= ddk下载目录\lib\wxp\*…Src目录:源代码路径,开发人员将需要编译的代码都放在src目录下。

Dir文件:是整个环境非常重要的一个文件,dir中记录了当前文件夹需要编译的子文件夹,并以一定格式组织,作为ddk编译时目录路由的凭证。

所有在dir目录中的文件夹都会被编译,可以通过删除在dir文件中的目录记录来排除编译某个文件夹。

WDK build 工具和操作其中OACR工具是用来做代码的静态分析,可以帮助我们规范代码,排查一些代码中的问题。

编译过程描述以及tang工程编译分析环境的设置:命令行窗口的启动,实际上是使用了以下的一段命令语句:C:\Windows\System32\cmd.exe /k D:\ddk_build\bin\setenv.bat D:\ddk_build\ chk x86 WinXP这段语句实际打开一个命令行窗口,并且执行Setenv.bat文件从而设置了一系列的环境变量。

在目录介绍章节当中提到的环境变量都在这个时候设置好的。

编译过程:build.exe实际执行编译的整个过程,大致过程可表示为:Scan:扫描工程文件。

编译过程的第一步,扫描整个工程中的文件树(dir文件起作用)并且决定是不是进行目标编译。

在扫描结束后,Build工具会根据扫描结果,得到目标的类型,以及决定整个编译过程的细节,包括有哪些步骤需要执行比如pass0,pass1,pass2,并且各个过程的参数有哪些等等。

总之就是编译任务执行前的所有准备工作。

Pass0:处理源代码。

在这个过程中NMAKE会调用一个或多个的工具去处理源代码,比如:∙Microsoft Interface Description Language (MIDL) compiler (Midl.exe).∙Other WDK support tools such as the Stamp INF tool (Stampinf.exe) and Managed Object Format (MOF) compiler (Mofcomp.exe).∙The BinPlace utility (Binplace.exe) to place files.Pass1:编译obj,lib文件。

编译源文件生成object文件和库文件。

以下的工具会被调用或可能被调用:∙The C/C++ compiler (Cl.exe).∙The Resource compiler (Rc.exe).∙Other WDK support tools such as the Stampinf.exe and Mofcomp.exe.∙The BinPlace utility (BinPlace.exe) to place files.∙The linker might be called through the OACR wrapper (Oacrlink.exe).Pass2:生成最终的目标文件。

在这个过程中linker会将pass1中生成的中间文件链接成最终的目标,比如可执行程序,dll,驱动程序等。

以下工具会被使用或可能被使用到:∙Linker (Link.exe).∙Resource compiler (Rc.exe).∙BinPlace utility (BinPlace.exe), to place files.∙The linker might be called through the OACR wrapper (Oacrlink.exe).Binplace文件:在pass0,1,2三个过程的每个结束时,如果我们在sources文件中定义了对应的PASS0_BINPLACE, PASS1_BINPLACE, PASS2_BINPLACE,那么BinPlace.exe都会被调用,并按照sources中定义的规则进行文件的binplace。

具体请参见sources文件分析部分。

Tang工程解析在ddk环境下的编译过程都严格的按照上面的步骤进行编译,下面将列举tang项目中的三个不同类型的工程lib,dll,exe 进行分析,主要是分析工程中的Sources文件。

SOURCES文件用于描述其所在目录下,有哪些文件参与编译,编译的结果应该是什么(是一个lib还是一个sys还是一个可执行程序),输出目录在哪里,要传递给编译器的各种定义和选项分别是什么,等等。

由一个SOURCES文件描述的其实就是一个单独的工程,Build 最后会参照SOURCES文件的设置,产生一个指定的目标文件(dll ? lib ? exe ? sys ?)完全依赖于SOURCES文件的写法。

CommonLib工程:TARGETNAME=Commonlib //Lib名称TARGETTYPE=LIBRARY //指定工程的类型为Lib工程C_DEFINES= $(C_DEFINES) -DUNICODE -D_UNICODE //指定为unicode编码MSC_WARNING_LEVEL=/W1 /WX //指定警告错误级别USE_MSVCRT=1 //使用crtUSE_STL=1 //使用STLUSE_ATL=1 //使用A TLSTL_VER=70 //指定STL版本为7.0MINWIN_SDK_LIB_PATH=$(SDK_LIB_PA TH)INCLUDES= $(COMMON_DIR)\Inc; \$(COMMON_DIR)\Support\Inc; \$(CRT_INC_PATH); \$(SDK_INC_PATH); \$(SDK_INC_PATH)\crt\stl70; \ //工程中引用头文件目录TARGETLIBS= \ //工程中引用的lib库$(SDK_LIB_PATH)\user32.lib \$(SDK_LIB_PATH)\Kernel32.lib \$(SDK_LIB_PATH)\Advapi32.lib \$(SDK_LIB_PATH)\comctl32.lib \$(SDK_LIB_PATH)\gdi32.lib \$(SDK_LIB_PATH)\winspool.lib \$(DDK_LIB_PATH)\nt.lib \$(SDK_LIB_PATH)\shell32.lib \$(SDK_LIB_PATH)\ole32.lib \$(SDK_LIB_PATH)\oleaut32.lib \$(SDK_LIB_PATH)\psapi.lib \$(SDK_LIB_PATH)\msxml2.lib \$(SDK_LIB_PATH)\shlwapi.lib \SOURCES=Commonlib.idl \RegistryFun.cpp \unzip.cpp \Util.cpp \WinObject.cpp \XmlWrapper.cpp \zip.cpp \ElementHelper.cpp \ //需要编译的源文件列表TARGET_DESTINATION=Target\chk //binplace的目的地址PASS0_BINPLACE=-:DEST Common\Inc $(OBJ_PATH)\$(O)\$(TARGETNAME).h //PASS0 binplacePASS2_BINPLACE=$(OBJ_PA TH)\$(O)\$(TARGETNAME).lib //PASS2 binplace其中pass0 的binplace使用了:DEST改变binplace的目的地址,如果定义了TARGET_DESTINATION,默认使用该定义的地址为binplace的目的地址。

但是可使用:DEST改写该值。

但必须严格按照语法进行定义。

Pass2使用默认的目标地址。

所以工程编译过程中,在sources的当前目录中生成一些中间文件,有几个是产生的log文件,可以帮助分析编译过程中的一些参数传递和一些错误等。

具体生成的中间文件及文件夹如下图,其中在文件夹类似objchk_wxp中生成的是obj,lib,res,manifest等中间文件:当然最终的目标文件也会生成在那个目录中,但是如果进行了binplace的设置,binplace.exe 会将设定的文件移动到目标目录下。

LogDLL工程:TARGETNAME=LogDll //Lib名称TARGETTYPE=DYNLINK //指定工程的类型为动态链接库工程C_DEFINES= $(C_DEFINES) -DUNICODE -D_UNICODE -DWIN32 MSC_WARNING_LEVEL=/W1 /WXUSE_MSVCRT=1USE_STL=1USE_ATL=1STL_VER=60MINWIN_SDK_LIB_PATH=$(SDK_LIB_PA TH)INCLUDES= $(COMMON_DIR)\Inc; \$(CRT_INC_PATH); \$(SDK_INC_PATH); \$(SDK_INC_PATH)\crt\stl60; \TARGETLIBS= \$(SDK_LIB_PATH)\user32.lib \$(SDK_LIB_PATH)\Kernel32.lib \$(SDK_LIB_PATH)\Advapi32.lib \$(SDK_LIB_PATH)\comctl32.lib \$(SDK_LIB_PATH)\gdi32.lib \$(SDK_LIB_PATH)\winspool.lib \$(DDK_LIB_PATH)\nt.lib \$(SDK_LIB_PATH)\shell32.lib \$(SDK_LIB_PATH)\ole32.lib \$(SDK_LIB_PATH)\oleaut32.lib \$(SDK_LIB_PA TH)\psapi.lib \$(SDK_LIB_PATH)\msxml2.lib \SOURCES=Log.cpp \LogDll.rc \TARGET_DESTINATION=Target\chkPASS1_BINPLACE=$(OBJ_PA TH)\$(O)\$(TARGETNAME).libPASS2_BINPLACE=$(OBJ_PA TH)\$(O)\$(TARGETNAME).dll和CommonLib类似,只是target类型不一样。

相关文档
最新文档