none
驱动开发出现 ::无法解析的外部符号 _WdfFunctions RRS feed

  • 问题

  • 编写驱动程序,使用WdfDriverCreate后就出现

    1>DriverMain.obj : error LNK2001: 无法解析的外部符号 _WdfFunctions
    1>DriverMain.obj : error LNK2001: 无法解析的外部符号 _WdfDriverGlobals

    NTSTATUS AddDevice(WDFDRIVER driver,PWDFDEVICE_INIT init)

    {

    return STATUS_SUCCESS;

    }

    extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING
     RegistryPath)
    {

     WDF_DRIVER_CONFIG config;
     WDF_DRIVER_CONFIG_INIT(&config,AddDevice);

     return WdfDriverCreate(DriverObject,RegistryPath,WDF_NO_OBJECT_ATTRIBUTES,&config,WDF_NO_HANDLE);
    }

    请问这个要怎么解决.谢谢

    • 已移动 ChiYau 2012年4月20日 5:27 這個提目和C++ 相關的, 所以發在C++版塊比較合適 (发件人:Visual Studio 2010)
    2012年4月20日 4:59

答案

  • LiFishing,你好!

    如果一个符号没有内部定义,链接器也找不到它的外部定义的话,就可能产生“无法解析的外部符号错误”。如果你想知道更多关于这个错误的原因,就参看这个链接:http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/08f0d2c3-6f5b-4cd2-a6ae-1d84b492e0e5。

    为了尽早解决这个问题,我建议你查找 _WdfFunctions 和 _WdfDriverGlobals 的定义。你可以尝试属性页上的/VERBOSE选项。打开Project->Properties->Configuration properties->Linker->General->Show Progress->Display all progress messages ,这样在控制台窗口就能打印出有关库文件的错误丢失信息。

    如果它们是你自己声明和定义的,那么请在使用前引用头文件,类似语句#include "a.h"。如果它们是在某个外部头文件中声明的,你可以尝试一下的方法添加外部引用:
    1->打开Configuration Properties->Linker->Input->"Additional Dependencies",在这里添加.lib文件的名称。
    2->打开Configuration Properties->Linker->General->"Additional Library Directories",并在这里添加.lib文件的路径。
    3->打开Configuration Properties->C/C++->General ->"Additional Include Directories",在这里添加所要引用的头文件的路径。
    4->在项目中用到这该符号的地方,添加#include "*.h"语句。

    希望我的回复对你有所帮助。


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年4月27日 6:05
    2012年4月23日 3:19

全部回复

  • LiFishing,你好!

    如果一个符号没有内部定义,链接器也找不到它的外部定义的话,就可能产生“无法解析的外部符号错误”。如果你想知道更多关于这个错误的原因,就参看这个链接:http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/08f0d2c3-6f5b-4cd2-a6ae-1d84b492e0e5。

    为了尽早解决这个问题,我建议你查找 _WdfFunctions 和 _WdfDriverGlobals 的定义。你可以尝试属性页上的/VERBOSE选项。打开Project->Properties->Configuration properties->Linker->General->Show Progress->Display all progress messages ,这样在控制台窗口就能打印出有关库文件的错误丢失信息。

    如果它们是你自己声明和定义的,那么请在使用前引用头文件,类似语句#include "a.h"。如果它们是在某个外部头文件中声明的,你可以尝试一下的方法添加外部引用:
    1->打开Configuration Properties->Linker->Input->"Additional Dependencies",在这里添加.lib文件的名称。
    2->打开Configuration Properties->Linker->General->"Additional Library Directories",并在这里添加.lib文件的路径。
    3->打开Configuration Properties->C/C++->General ->"Additional Include Directories",在这里添加所要引用的头文件的路径。
    4->在项目中用到这该符号的地方,添加#include "*.h"语句。

    希望我的回复对你有所帮助。


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年4月27日 6:05
    2012年4月23日 3:19
  • 如果大家把此错误在网上搜索,一般都没有人解答。

    解决方法是在sources里添加以下选项:

     

    KMDF_VERSION_MAJOR=1

    MSC_WARNING_LEVEL=/W4 /WX


    请参考我的博客,希望对你有帮助:
    http://blog.csdn.net/chenyujing1234/article/details/7579761
    2012年5月18日 9:07