`
jandroid
  • 浏览: 1933580 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ce 6.0 链接错误

 
阅读更多

今天在CE 6.0中添加了一个驱动,在buid我的驱动的时候,显示有链接错误。是我驱动中调用FSDMGR_AdvertiseInterface,等几个fsdmgr中的函数,链接有问题。由于以前在网上看到的资料,说产生链接错误,很有可能是环境配置有问题。基于此,我换了个机器,重新配置环境,结果错误照常产生。后来请教了一位大侠,大侠提醒,很有可能是链接的lib有问题。在大侠的帮助下,进行了一下尝试:
一、驱动的sources文件中调用的是coredll.lib,怀疑ce6.0中的lib分为用户(coredll.lib)和内核(k.coredll.lib),所以将coredll.lib换成了k.coredll.lib,结果依然不行。
二、既然调用的是fsdmgr中的函数,我将fsdmgr的dll链接过来,应该就可以了吧。打开fsdmgr的sources文件,看到其 TARGETNAME 为 fsdmgr_lib,搜索到 fsdmgr_lib.lib 的位置,在自己驱动的sources文件中添加对该lib的链接。结果,fsdmgr_lib.lib 中有一堆错误产生。
三、此时想到了帮助文档,在帮助文档中搜FSDMGR_AdvertiseInterface,显示
Requirements
Header
fsdmgr.h
Library
Fsdmgr.lib
Windows Embedded CE
Windows CE 2.10 and later
头文件已经完成了包含,就在驱动的sources文件中添加了对fsdmgr.lib的链接。当然,首先要在自己的环境中找到fsdmgr.lib的位置。此时,再去build驱动,一切OK。
看来帮助文档是王道,遇到问题,只凭猜测是不行的。

在连接fsdmgr_lib.lib的时候,显示的错误如下:
BUILD: [01:0000000105:ERRORE] fsdmgr_lib.lib(fsdmain.obj) : error LNK2005: _DllMain already defined in JFS_Main.obj
BUILD: [01:0000000106:ERRORE] fsdmgr_lib.lib(mountedvolume.obj) : error LNK2019: unresolved external symbol _NotifyCreateFile referenced in function "public: void * __cdecl MountedVolume_t::NotifyCreateFile(unsigned short const *)" (?NotifyCreateFile@MountedVolume_t@@QAAPAXPBG@Z)
BUILD: [01:0000000107:ERRORE] fsdmgr_lib.lib(mountedvolume.obj) : error LNK2019: unresolved external symbol _NotifyCreateVolume referenced in function "public: long __cdecl MountedVolume_t::Attach(void)" (?Attach@MountedVolume_t@@QAAJXZ)
BUILD: [01:0000000108:ERRORE] fsdmgr_lib.lib(mountedvolume.obj) : error LNK2019: unresolved external symbol _NotifyDeleteVolume referenced in function "protected: void __cdecl MountedVolume_t::Destroy(void)" (?Destroy@MountedVolume_t@@IAAXXZ)
BUILD: [01:0000000109:ERRORE] fsdmgr_lib.lib(volumeapi.obj) : error LNK2019: unresolved external symbol _NotifyPathChange referenced in function "public: void __cdecl MountedVolume_t::NotifyPathChange(unsigned short const *,int,unsigned long)" (?NotifyPathChange@MountedVolume_t@@QAAXPBGHK@Z)
BUILD: [01:0000000110:ERRORE] fsdmgr_lib.lib(mounttable.obj) : error LNK2001: unresolved external symbol _NotifyPathChange
BUILD: [01:0000000111:ERRORE] fsdmgr_lib.lib(volumeapi.obj) : error LNK2019: unresolved external symbol _NotifyMoveFile referenced in function "public: void __cdecl MountedVolume_t::NotifyMoveFile(unsigned short const *,unsigned short const *)" (?NotifyMoveFile@MountedVolume_t@@QAAXPBG0@Z)
BUILD: [01:0000000112:ERRORE] fsdmgr_lib.lib(volumeapi.obj) : error LNK2019: unresolved external symbol _NotifyMoveFileEx referenced in function "public: void __cdecl MountedVolume_t::NotifyMoveFileEx(unsigned short const *,unsigned short const *,int)" (?NotifyMoveFileEx@MountedVolume_t@@QAAXPBG0H@Z)
BUILD: [01:0000000113:ERRORE] fsdmgr_lib.lib(volumeapi.obj) : error LNK2019: unresolved external symbol _NotifyCreateEvent referenced in function "public: void * __cdecl MountedVolume_t::NotifyCreateEvent(void *,unsigned short const *,int,unsigned long)" (?NotifyCreateEvent@MountedVolume_t@@QAAPAXPAXPBGHK@Z)
BUILD: [01:0000000114:ERRORE] fsdmgr_lib.lib(fileapi.obj) : error LNK2019: unresolved external symbol _NotifyCloseHandle referenced in function "public: void __cdecl MountedVolume_t::NotifyCloseHandle(void *)" (?NotifyCloseHandle@MountedVolume_t@@QAAXPAX@Z)
BUILD: [01:0000000115:ERRORE] fsdmgr_lib.lib(fileapi.obj) : error LNK2019: unresolved external symbol _NotifyHandleChange referenced in function "public: void __cdecl MountedVolume_t::NotifyHandleChange(void *,unsigned long)" (?NotifyHandleChange@MountedVolume_t@@QAAXPAXK@Z)
BUILD: [01:0000000116:ERRORE] fsdmgr_lib.lib(pathapi.obj) : error LNK2019: unresolved external symbol _NotifyGetNextChange referenced in function _FSEXT_FindNextChangeNotification
BUILD: [01:0000000117:ERRORE] fsdmgr_lib.lib(pathapi.obj) : error LNK2019: unresolved external symbol _INT_NotifyGetNextChange referenced in function _FSINT_FindNextChangeNotification
BUILD: [01:0000000118:ERRORE] fsdmgr_lib.lib(pathapi.obj) : error LNK2019: unresolved external symbol _NotifyCloseChangeHandle referenced in function _FSEXT_FindCloseChangeNotification
BUILD: [01:0000000119:ERRORE] fsdmgr_lib.lib(pathapi.obj) : error LNK2019: unresolved external symbol _INT_NotifyCloseChangeHandle referenced in function _FSINT_FindCloseChangeNotification
BUILD: [01:0000000120:ERRORE] C:/WINCE600/platform/NaviCoreJ3Eval/target/SH4/retail/JacintoFSD.dll : fatal error LNK1120: 13 unresolved externals
第一个错误显示了DllMain重复定义。用记事本打开fsdmgr_lib.lib文件,在其中可以找到DllMain的信息。然后打开fsdmgr.lib文件,在里面找不到DllMain的信息。
查了些资料,发现是自己对动态链接库和静态链接库的理解不到位。
.lib文件有两种:
一种是静态链接库。这种情况下,.lib文件不过是将需要的.obj文件进行了一个打包,并在相应的头文件中对其中的函数进行声明。在链接的时候,会将静态库的整个内容,包含到你的程序生成的EXE文件中。如果静态库中也定义了DLLMain函数,该静态库就不能被其他动态库(含有DLLMain函数)链接,否则会出现DLLMain重复定义的错误。需要说明的是,静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
另一种.lib文件是动态链接库的导入库(Import Libraries)。使用导入库,并include了动态库的头文件,就可以直接使用头文件中声明的函数,而不需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。
此处之所以链接fsdmgr.lib正常,而链接fsdmgr_lib.lib时出错,是因为fsdmgr_lib.lib是静态库,里面包含了DLLMain函数,以及其他函数的实现,所以会显示DLLMain重复定义,函数实现中使用到的一些接口,在自己的驱动中也是找不到的,所以出现了很多错误。而fsdmgr.lib是动态链接库fsdmgr.dll的导入库,所以,在驱动中链接该库一切OK。
呵呵,顺便恶补了一下动态库与静态库的知识。
分享到:
评论

相关推荐

    Windows CE 6.0嵌入式高级编程(中文版)

    第20章 部署CE6.0设备 20.1 Windows网络投影仪 20.2 Windows网络投影仪OS设计 20.3 Windows网络投影仪的使用 20.4 小结 附录A Windows Embedded CE资源 附录B 安装和软件 附录C 示例应用程序和OS设计项目

    CE6.0模拟器

    **CE6.0模拟器详解** CE6.0模拟器是一种专为车载系统设计的软件模拟平台,它基于Microsoft的Windows Embedded CE 6.0操作系统。Windows Embedded CE 6.0是微软公司推出的轻量级操作系统,广泛应用于各种嵌入式设备...

    Professional Microsoft Windows Embedded CE 6.0第5章

    在Windows Embedded CE 6.0中,驱动程序是连接硬件和操作系统的关键组件。开发者需要理解如何编写设备驱动程序,以确保硬件功能的充分利用和系统的兼容性。这包括了解驱动模型,如WDM(Windows Driver Model)和NDIS...

    WindowsCE 6.0基本原理

    在Windows CE环境中,驱动程序是连接硬件和操作系统的重要桥梁。这一章将深入介绍如何为不同的硬件设备开发驱动程序,包括I/O控制、中断处理、DMA传输等机制。同时,还会讨论驱动模型,如WDM(Windows Driver Model...

    sms.rar_RIL wince S_ce6.0 s_sms_wince_wince ril

    标题中的“sms.rar_RIL wince S_ce6.0 s_sms_wince_wince ril”表明这是一个关于Windows CE 6.0系统下使用RIL(Radio Interface Layer)进行短信服务(SMS)操作的示例项目。RIL是操作系统与无线通信模块之间的一个...

    CE6.0 802.11B 无线网卡驱动源码(SDIO)

    标题中的“CE6.0 802.11B 无线网卡驱动源码(SDIO)”指的是在Windows CE 6.0操作系统环境下,针对802.11b标准的无线网卡开发的一套驱动程序源代码,且该驱动程序特别采用了SDIO(Secure Digital Input/Output)接口...

    Professional Microsoft Windows Embedded CE 6.0第14章

    《Professional Microsoft Windows Embedded CE 6.0第14章》主要涵盖了Windows Embedded CE 6.0(简称WinCE 6.0)系统开发中的一个重要环节,即设备驱动程序的开发和管理。本章深入探讨了如何为WinCE 6.0平台设计、...

    VS2005_WINCE6.0安装指导

    而Windows CE 6.0(简称WinCE6.0)是微软推出的一款嵌入式操作系统,特别适用于移动设备和小型化硬件系统。VS2005与WinCE6.0结合,可以为开发者提供一个强大的平台,用于创建、调试和部署基于WinCE6.0的应用程序。 ...

    WinCE6.0下载地址

    Windows CE 6.0相比于之前的版本,在用户界面、多媒体支持、网络连接等方面都有了显著的提升。 ### 下载链接解析 在给出的内容中,我们看到了一系列的下载链接,这些链接指向了不同的.CAB文件,例如`CE_10_1.cab`...

    winCE6.0环境下tcp测试实例

    在Windows CE 6.0(简称WinCE6.0)这个嵌入式操作系统上进行TCP通信测试是非常重要的,尤其对于开发物联网设备、工业自动化设备或者移动设备应用的工程师来说。TCP(传输控制协议)是一种面向连接的、可靠的、基于...

    wince下wifi连接

    在Windows CE(简称WinCE)操作系统环境下,对WiFi进行连接是一项关键的技术操作,尤其是在嵌入式设备和移动设备中。Windows CE是微软为小型设备设计的一种实时操作系统,它提供了丰富的API和工具,允许开发者实现...

    wince6.0串口调试工具

    在Windows CE 6.0(简称WinCE6.0)操作系统中,串行通信(Serial Port)是设备间进行数据交换的重要方式,特别是在嵌入式系统和开发阶段。本资源包含的是针对不同处理器架构的串口调试工具,包括SM_SH4_V2.1.exe...

    Windows_Embedded_CE_6.0_Debugging_Profiling.zip_visual c

    1. WinCE 6.0调试器:Microsoft Platform Debugger (MSDbg) 是Windows CE 6.0的内置调试器,它可以连接到运行中的设备或模拟器进行实时调试。MSDbg提供了设置断点、查看内存、跟踪调用堆栈等功能,帮助开发者定位和...

    i.MX51_EVK_Windows_Embedded_CE_6.0_User's_Guide

    ### i.MX51 EVK Windows Embedded CE 6.0 用户指南知识点解析 #### 一、概述 **i.MX51 EVK Windows Embedded CE 6.0 用户指南**是针对基于Freescale i.MX51系列处理器的开发板(i.MX51 EVK)上运行Windows ...

    WINCE\WinCE下USB无线网卡驱动程序

    在Windows CE (WINCE) 操作系统环境下,无线网卡驱动程序是确保设备与网络连接的关键组成部分。在本文中,我们将深入探讨如何在WinCE 5.0和WinCE 6.0上安装和配置USB无线网卡驱动,以及相关的技术细节。 标题...

    2440 wince6.0 BSP

    标题中的“2440 wince6.0 BSP”指的是基于Samsung S3C2440微处理器的Windows CE 6.0 Board Support Package(BSP)。BSP是硬件平台与操作系统之间的桥梁,它包含了驱动程序、配置文件和其他必要的软件组件,确保操作...

Global site tag (gtag.js) - Google Analytics