libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1777回复:18

DDk啊编译问题

楼主#
更多 发布于:2004-03-04 21:29
我设置好了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的地方去掉,能成功生成驱动文件。

什么原因?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-03-04 21:32
ntoskrnl.lib没有添加?不会吧?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-05 08:01
ntoskrnl.lib没有添加?不会吧?



那怎么添加?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2004-03-05 09:01
[quote]ntoskrnl.lib没有添加?不会吧?



那怎么添加? [/quote]

notoskrnl.lib不需要添加,它是缺省链接的。你的makefile和Source文件是怎么写的?
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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]
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
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, 路径对不对。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-05 13:50
在各位大侠们的帮助下,我把问题解决了,VC的编译环境下,我把LINK选项里添加了ntoskrnl.lib,就能正确编译了。

但出现了新的问题,提示有79个错误,说PDEVICEOBJECT ,NTSTATUS, 等类型没有定义,我的程序 没有语法上的错误,因为以前我编译过的,能生成。SYS文件,但现在不论在VC编译环境下还是在DDK的控制台编译环境下都不能正确编译。为什么??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
nosegay
驱动牛犊
驱动牛犊
  • 注册日期2003-12-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-05 16:40
你的wdm.h没忘include吧?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-05 17:04
你的wdm.h没忘include吧?


我的驱动源文件jiema.c 里加了ntddk.h这个头文件,没有加wdm.h,怎么一定要加吗?
我回去加上式试,我看别人的程序没有加。

我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-05 17:19
我加上了wdm.h文件,但还有原来的错误。

怎么出现这样的怪问题????
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-03-05 20:55
一般这种错误都是环境变量没有设置好
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-03-05 21:05
一般这种错误都是环境变量没有设置好


我用设置好的环境变量编译DDK的例子没什么问题。


那都设置哪些啊?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
yilou
驱动小牛
驱动小牛
  • 注册日期2004-02-17
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望32点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-03-06 09:27
怎么设置啊!
希望能帮到你,希望能得到你的帮助!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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,但为什么出现这样的毛病?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
wengyu100
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-03-06 20:36
你可能犯了和我一样的错误
在c中,变量要先定义再使用

你的程序中DriverEntry里第一行是DbgPrint(",,,,,");
而你在其后定义变量
就违背了这个原则
所以出现变量非法
就连NTSTATUS这样最基本的类型也是非法的

你看是不是这样?


libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-03-06 21:03
你可能犯了和我一样的错误
在c中,变量要先定义再使用

你的程序中DriverEntry里第一行是DbgPrint(",,,,,");
而你在其后定义变量
就违背了这个原则
所以出现变量非法
就连NTSTATUS这样最基本的类型也是非法的

你看是不是这样?


 



有道理!以前还一直以为时环境变量设置的不对呢!还时学艺不精啊!

不过现在我又遇到了新的问题,大虾们给看看:

--------------------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,但为什么出现这样的毛病?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2004-03-06 22:32
估计是你的ISR所在的文件扩展名是cpp的缘故
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-03-07 08:28
估计是你的ISR所在的文件扩展名是cpp的缘故


JiemaIsr 是我的中断服务例程,它在我的源文件jiema.c里,扩展名不是cpp,是c,头文件也包括全了,真的很奇怪,为什么就不行?把
IoConnectInterrupt函数注释掉就不出毛病了。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-03-07 19:53
[quote]估计是你的ISR所在的文件扩展名是cpp的缘故


JiemaIsr 是我的中断服务例程,它在我的源文件jiema.c里,扩展名不是cpp,是c,头文件也包括全了,真的很奇怪,为什么就不行?把
IoConnectInterrupt函数注释掉就不出毛病了。 [/quote]

问题解决了,发现现在自己越来越不象话了,我吧中断服务程序地函数名些错了,少写了个字母,所以连接不到!该打!

现在我写地驱动框架驱动入口点没什么问题,能正确申请到所有地资源,创建设备对象,创建符号连接,获得中断。驱动卸载也成功,但关机地时候蓝屏,0x51提示又注册表错误??
怎么回事??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部