阅读:3970回复:9
编译网卡驱动程序时出错找不到ndis.h文件,为什么?(100分答谢)--分数已给
我的Workspace放在D;\\Working\\PdaTry,网卡驱动放在D;\\Silance
网卡驱动程序由makefile,sources和驱动程序文件组成,没有.reg文件,先通过BSP Wizard加到Catalog,然后从Catalog加到Platform,Build Platform时出错:NMAKE: U1073: don\'t know how to make \'D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen\\oak\\lib\\x86\\debug\\silance.def\' 我看了一下,PlatformBuilder的确没有把我的silance.def拷到该目录下,于是我手动的把silance.def拷到该目录下,我注意到该目录下并没有其他的.def文件。 再右键选中并且Build the Selected Feature,这时出错如下: Platform header files are up-to-date... Performing Additional Build Actions... Srcgen D:\\Silance PDATRY D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen BUILD: Compile and link for X86. BUILD: Loading D:\\Silance\\Build.dat... BUILD: Computing Include file dependencies: BUILD: Examing d:\\Silance directory for files to compile. d:\\Silance BUILD: Building generated files in d:\\Silance BUILD: Examing d:\\Silance directory for files to compile.(2nd Pass) d:\\Silance d:\\Silance -12 source files (3,316 lines) BUILD: Compiling d:\\Silance directory Compiling -d:\\Silance\\.\\init.c for x86 d:\\Silance\\.\\precomp.h(16): error C1083: cannot open include file: \'ndis.h\' No such file or directory. ... 后面是一堆同样的错误,只要是涉及到ndis.h的地方。再有就是由于缺少ndis.h引起的函数未定义错误。 init.c中有include<precomp.h> precomp.h内容如下: #ifndef ___PRECOMP___H__ #define ___PRECOMP___H__ #include <ndis.h> #include <function.h> // 我自己的头文件 #include <maindef.h> // 我自己的头文件 #endif 我按照有些大虾的提议做了,把ndis5.1从Catalog中加到Platform,重新编译平台,可再编译我的Feature时依然出现上面的错误,这是为什么啊,100分答谢!!! [编辑 - 3/9/03 by silan] |
|
|
沙发#
发布于:2003-03-07 14:33
把ndis.h拷贝到你的网卡驱动目录下或者设置一下头文件的路径试试
|
|
板凳#
发布于:2003-03-07 14:51
ndis.h里面还包含了很多其它的头文件,如ntcompat.h等等,如果仅仅修改#include <ndis.h>为#include <D:\\WINCE\\...\\ndis.h>的话,依然无法解决ndis.h包含的其它头文件的路径问题。你说的修改路径是不是从Tools->Options->Directories中修改,我改过了,也不行啊。
拷过来可能不行,我也觉得应该修改路径,但不知道怎么改,如果路径不告诉编译器,link的时候编译器可能还会出问题。 [编辑 - 3/8/03 by silan] |
|
|
地板#
发布于:2003-03-07 15:03
Options->Directories中加入NDIS.H的路径不行吗?
你是选择的included files 再ADD include 的路径吗? |
|
地下室#
发布于:2003-03-07 15:16
是的,而且选择的included files 再ADD include 的路径的,不行,我头都大了。
我是不是还要改我定制的平台上的.reg或者.bat文件?不然PlatformBuilder怎么不会自动把我的silance.def文件加到平台中去呢?每次编译平台后该文件都会被删掉。 我把ndis5.1从Catalog加到Platform中去了,结果编译平台时没问题(有警告),选中ndis5.1,再Build the selected feature时也会出错: Error PB2504: Error spawning #(C:\\WinCEKits\\WINCE410\\private\\winceos\\COMM\\ndis51\\ntcompat\\)build.exe 我查看了一下C:\\WinCEKits\\WINCE410\\private\\winceos\\COMM目录,下面根本没有\\ndis51子目录。 |
|
|
5楼#
发布于:2003-03-07 15:32
1、如果你在这加了这个路径,不应该还找不到ndis.h
另:你的网卡驱动是单独编译的,还是和整个系统一起编译的? 建议:定制一个系统(有网卡支持),然后再单独编译你的网卡驱动。 对了,最好在IDE和命令行下都试一下 |
|
6楼#
发布于:2003-03-08 16:39
在#include <ndis.h>中的ndis.h前加上路径之后,ndis.h里包含了ntcompat.h,ntcompat.h又include <wdm.h>,这些路径又都找不到了,而且我按有些大虾的意思把
#include <ndis.h> 改成 extern \"C\" { #include <ndis.h> } 也不行。 和平台一起编译的时候出警告: NMAKE: U1073: don\'t know how to make \'D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen\\oak\\lib\\x86\\debug\\silance.def\' silance.def是我的驱动程序中的一部分,都放在D:\\Silance目录下,里面定义了Exports,PlatformBuilder不会自己把它拷到‘D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen\\oak\\lib\\x86\\debug\\’这个临时文件夹下。命令行编译我不会,我回去再看看用命令行编译一下。 |
|
|
7楼#
发布于:2003-03-09 15:06
1、在你的SOURCES文件的“INCLUDES=”这一项中加入你的NDIS.H的路径试试。
2、你的silance.def文件找不到,我怀疑你通过BSP Wizard加到Catalog时可能不太对。 |
|
8楼#
发布于:2003-03-09 18:00
yusb,我的问题已经自行解决,今天特来放分,本来决定分数见者有份,但发现你说的INCLUDE是对的,所以还是决定很公平的把分数给你,谢谢你!
问题是这样解决的。我的sources是参考ne2000的驱动写的,把ne2000的加到平台也会出同样的问题,所以我又打开了几个sources,其中有一个是无线网卡的,发现这款无线网卡里有一项INCLUDES,于是我就加上了: _PUBLICROOT=D:\\Working\\EmbPad\\PdaTry\\WINCE410\\Emulator\\cesysgen INCLUDES=\\ $(_PUBLICROOT)\\sdk\\inc; \\ $(_PUBLICROOT)\\ddk\\inc; \\ $(_PUBLICROOT)\\oak\\inc; \\ ..\\inc; 这样就不会找不到头文件了。 找不到silance.def,我把WINCETARGETFILE0=$(_COMMONOKAROOT)\\lib\\$(_CPUINDPATH)\\silance.def 改成 WINCETARGETFILE0=$(_RELEASELIBDIR)\\$(TARGETDEFNAME).def 就行了。 |
|
|
9楼#
发布于:2003-03-10 09:17
谢谢silan
|
|