阅读:1864回复:18
DDk啊编译问题
我设置好了DDK的编译环境,编译我的程序,得到以下的提示:
Compiling... jiema.c Linking... jiema.obj : error LNK2001: unresolved external symbol __imp__IoReportResourceUsage@36 .\objchk\i386\jiema.sys : fatal error LNK1120: 1 unresolved externals Error executing link.exe. 但我吧使用IoReportResourceUsage的地方去掉,能成功生成驱动文件。 什么原因? |
|
|
沙发#
发布于:2004-03-04 21:32
ntoskrnl.lib没有添加?不会吧?
|
|
板凳#
发布于:2004-03-05 08:01
ntoskrnl.lib没有添加?不会吧? 那怎么添加? |
|
|
地板#
发布于:2004-03-05 09:01
[quote]ntoskrnl.lib没有添加?不会吧? 那怎么添加? [/quote] notoskrnl.lib不需要添加,它是缺省链接的。你的makefile和Source文件是怎么写的? |
|
|
地下室#
发布于:2004-03-05 10:40
[quote][quote]ntoskrnl.lib没有添加?不会吧? 那怎么添加? [/quote] notoskrnl.lib不需要添加,它是缺省链接的。你的makefile和Source文件是怎么写的? [/quote] SOURCE文件: TARGETNAME=jiema TARGETPATH=OBJ TARGETTYPE=DRIVER source = jiema.c MAKEFILE从DDK的例子上拷贝一个过来没有修改。 [编辑 - 3/5/04 by libin2309] |
|
|
5楼#
发布于:2004-03-05 11:28
[quote][quote][quote]ntoskrnl.lib没有添加?不会吧? 那怎么添加? [/quote] notoskrnl.lib不需要添加,它是缺省链接的。你的makefile和Source文件是怎么写的? [/quote] SOURCE文件: TARGETNAME=jiema TARGETPATH=OBJ TARGETTYPE=DRIVER source = jiema.c MAKEFILE从DDK的例子上拷贝一个过来没有修改。 [编辑 - 3/5/04 by libin2309] [/quote] 你的SOURCES文件没有错,makefile应该也不会错。你是从命令行编译的吗?有没有将它转成工程文件,在VC中编译。如果有,检查一下工程文件的link选项中,有没有ntoskrnl.lib, 路径对不对。 |
|
|
6楼#
发布于:2004-03-05 13:50
在各位大侠们的帮助下,我把问题解决了,VC的编译环境下,我把LINK选项里添加了ntoskrnl.lib,就能正确编译了。
但出现了新的问题,提示有79个错误,说PDEVICEOBJECT ,NTSTATUS, 等类型没有定义,我的程序 没有语法上的错误,因为以前我编译过的,能生成。SYS文件,但现在不论在VC编译环境下还是在DDK的控制台编译环境下都不能正确编译。为什么?? |
|
|
7楼#
发布于:2004-03-05 16:40
你的wdm.h没忘include吧?
|
|
8楼#
发布于:2004-03-05 17:04
你的wdm.h没忘include吧? 我的驱动源文件jiema.c 里加了ntddk.h这个头文件,没有加wdm.h,怎么一定要加吗? 我回去加上式试,我看别人的程序没有加。 |
|
|
9楼#
发布于:2004-03-05 17:19
我加上了wdm.h文件,但还有原来的错误。
怎么出现这样的怪问题???? |
|
|
10楼#
发布于:2004-03-05 20:55
一般这种错误都是环境变量没有设置好
|
|
11楼#
发布于:2004-03-05 21:05
一般这种错误都是环境变量没有设置好 我用设置好的环境变量编译DDK的例子没什么问题。 那都设置哪些啊? |
|
|
12楼#
发布于:2004-03-06 09:27
怎么设置啊!
|
|
|
13楼#
发布于:2004-03-06 20:06
问题解决了,但不知道为什么会时这样造成的:
我的程序中DriverEntry里第一行时: DbgPrint(",,,,,"); 我吧这行去掉,或者放到后面,就能成功编译,一个错误也没有,但放到第一行就有很多奇怪的错误。为什么?? 另外我又遇上这样的问题: --------------------Configuration: jiema - Win32 Debug-------------------- Compiling... jiema.c Linking... jiema.obj : error LNK2001: unresolved external symbol _JiemaIsr@8 Debug\jiema.SYS : fatal error LNK1120: 1 unresolved externals Error executing link.exe. jiema.SYS - 2 error(s), 0 warning(s) 当我调用IoConnectInterrupt这个函数编译的时候就出现这样的错误。把调用IoConnectInterrupt函数的地方注释掉,能正确编译出 .sys 文件。 我在VC的IDE环境下编译的,在“工程”,“设置”,“LINK”里设置了连接的库,加上了 ntoskrnl.lib,但为什么出现这样的毛病? |
|
|
14楼#
发布于:2004-03-06 20:36
你可能犯了和我一样的错误
在c中,变量要先定义再使用 你的程序中DriverEntry里第一行是DbgPrint(",,,,,"); 而你在其后定义变量 就违背了这个原则 所以出现变量非法 就连NTSTATUS这样最基本的类型也是非法的 你看是不是这样? |
|
15楼#
发布于:2004-03-06 21:03
你可能犯了和我一样的错误 有道理!以前还一直以为时环境变量设置的不对呢!还时学艺不精啊! 不过现在我又遇到了新的问题,大虾们给看看: --------------------Configuration: jiema - Win32 Debug-------------------- Compiling... jiema.c Linking... jiema.obj : error LNK2001: unresolved external symbol _JiemaIsr@8 Debugjiema.SYS : fatal error LNK1120: 1 unresolved externals Error executing link.exe. jiema.SYS - 2 error(s), 0 warning(s) 当我调用IoConnectInterrupt这个函数编译的时候就出现这样的错误。把调用IoConnectInterrupt函数的地方注释掉,能正确编译出 .sys 文件。 我在VC的IDE环境下编译的,在“工程”,“设置”,“LINK”里设置了连接的库,加上了 ntoskrnl.lib,但为什么出现这样的毛病? |
|
|
16楼#
发布于:2004-03-06 22:32
估计是你的ISR所在的文件扩展名是cpp的缘故
|
|
17楼#
发布于:2004-03-07 08:28
估计是你的ISR所在的文件扩展名是cpp的缘故 JiemaIsr 是我的中断服务例程,它在我的源文件jiema.c里,扩展名不是cpp,是c,头文件也包括全了,真的很奇怪,为什么就不行?把 IoConnectInterrupt函数注释掉就不出毛病了。 |
|
|
18楼#
发布于:2004-03-07 19:53
[quote]估计是你的ISR所在的文件扩展名是cpp的缘故 JiemaIsr 是我的中断服务例程,它在我的源文件jiema.c里,扩展名不是cpp,是c,头文件也包括全了,真的很奇怪,为什么就不行?把 IoConnectInterrupt函数注释掉就不出毛病了。 [/quote] 问题解决了,发现现在自己越来越不象话了,我吧中断服务程序地函数名些错了,少写了个字母,所以连接不到!该打! 现在我写地驱动框架驱动入口点没什么问题,能正确申请到所有地资源,创建设备对象,创建符号连接,获得中断。驱动卸载也成功,但关机地时候蓝屏,0x51提示又注册表错误?? 怎么回事?? |
|
|