用EVC编译程序的时候经常出现连接错误,类似:
error LNK2019: unresolved external symbo......
比如我连接一个Ras拨号程序,先添加了头文件ras.h引用
#include <ras.h>
但还是出现了以下错误:
error LNK2019: unresolved external symbol RasDial
referenced in function.....
这样的错误,查MSDN关于RasDiall函数:
Runs on Versions Defined in Include Link to
Windows CE OS 1.0 and later Ras.h, Afdfunc.h Ras.h, Afdfunc.h Ppp.lib
添加对Ppp.lib静态库的引用:
#pragma comment(lib, "Ppp.lib")
又提示说找不到静态库"Ppp.lib",跑到WinCE安装目录,把Ppp.lib搜出来,拷贝到程序
的当前目录下,再编译,又回到了起点,连接错误。
查WinCE5.0的帮助文档,上面是这样写的:
Requirements
OS Versions: Windows CE 1.0 and later.
Header: Ras.h.
Link Library: Coredll.lib.
这就需要我们连接Coredll.lib库,再次跑到WinCE安装目录,把coredll.lib搜出来
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib
拷贝到程序当前目录下,编译通过。
-------------------------------------------------------------------------------------------------------------------
下面来分析下Coredll.lib是怎么来的:
找遍了WinCE安装目录下的sources,makefile,makefile.def文件,没有发现相关的编译选项
在build.log中有如下打印信息:
makefile.def: Invoked with predefined settings:
TARGETNAME: coredll
TARGETTYPE: LIBRARY
RELEASETYPE: SDK
TARGETLIBS: D:\WINCE500\public\common\oak\lib\MIPSII\retail\corestub.lib
D:\WINCE500\PBWorkspaces\TM_KIOSK_SIEMENS\WINCE500\DB1200_MIPSII\cesysgen\oak\target\MIPSII\retail\0409\coredll.res
SOURCELIBS: D:\WINCE500\public\common\oak\lib\MIPSII\retail\coremain.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\lmem.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\showerr.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\thunks.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\corecrt.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\cryptapi.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\mincrypt_coredll.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\tnotify.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\tapilib.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\coresip.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\rectapi.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\wmgr_c.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\mgdi_c.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\accel_c.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\messagedialogboxthunk.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\shcore.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\shortcut.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\shexec.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\shmisc.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\fileopen.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\fileinfo.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\dsa.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\mmwave.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\mmsnd.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\mmmix.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\devload.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\fiber.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\coreimm.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\fmtmsg.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\serdev.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\coreloc.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\multiui.lib
D:\WINCE500\public\common\oak\lib\MIPSII\retail\rsa32.lib
这段信息相当于coredll.lib的sources文件,而这些说明是被预设的
当编译开始后,以参数的方式传递给了
D:\WINCE500\PUBLIC\COMMON\OAK\MISC\makefile.def
上面这段信息就是makefile.def的输出。
coredll.lib所依赖的库不是以源码的方式提供的,开始编译系统后
PB会根据不同的处理器类型连接不同的coredll.lib到工程目录。
所以coredll.lib不能通用。