这几天做COM技术内幕第10章的例子,手动编译时碰到了麻烦,请高手指点下!
问题如下:(我用的是VS2013C++)
这一章的例子用到手动编译,我这方面没经验,总是出错,于是就想到把客户端,COM控件,
代理DLL,本地服务器分别用VS2013在IDE下做出来,前面的客户端,和COM控件我做出来
了,但COM控件手动编译总是出错.这个问题困了我好几天了,资料查了好多,但手动编译总是过不去.
下面是我的Makefile文件的内容:
SERVER =
TARGETS = Server.dll
#/c /MTd /Zi /Od /D_DEBUG /D "_UNICODE" /D "UNICODE"
CPP_FLAGS = /c /MTd /Zi /Od /D_DEBUG /D "_UNICODE" /D "UNICODE"
#EXE_LINK_FLAGS = /NOD /DEBUG
DLL_LINK_FLAGS = /NOD /DLL /DEBUG /DEF:"SERVER.DEF" /IMPLIB:Server.lib
LIBS = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
all :$(TARGETS)
guids.obj : guids.c
cl /c /DWIN32 /DREGISTER_PROXY_DLL guids.c
server.obj : server.cpp cunknown.h cfactory.h iface.h
cl $(CPP_FLAGS) /Fo"$*.obj" server.cpp
cmpnt1.obj : cmpnt1.cpp cmpnt1.h iface.h registry.h \
CUnknown.h
cl $(CPP_FLAGS) /Fo"$*.obj" cmpnt1.cpp
cmpnt2.obj : cmpnt2.cpp cmpnt2.h iface.h registry.h \
CUnknown.h
cl $(CPP_FLAGS) /Fo"$*.obj" cmpnt2.cpp
cmpnt3.obj : cmpnt3.cpp cmpnt3.h iface.h registry.h \
CUnknown.h
cl $(CPP_FLAGS) /Fo"$*.obj" cmpnt3.cpp
CUnknown.obj : CUnknown.cpp CUnknown.h
cl $(CPP_FLAGS) $(SERVER) /Fo"$*.obj" CUnknown.cpp
CFactory.obj : CFactory.cpp CFactory.h
cl $(CPP_FLAGS) $(SERVER) /Fo"$*.obj" CFactory.cpp
registry.obj : registry.cpp registry.h
cl $(CPP_FLAGS) $(SERVER) /Fo"$*.obj" registry.cpp
util.cpp compiled for server.
util.obj : util.cpp util.h
cl $(CPP_FLAGS) $(SERVER) /Fo"$*.obj" util.cpp
SERVER_OBJS = Server.obj \
Cmpnt1.obj \
Cmpnt2.obj \
Cmpnt3.obj \
Registry.obj \
Cfactory.obj \
Cunknown.obj \
Util.obj \
Guids.obj
Server.dll: $(SERVER_OBJS) Server.def
link $(DLL_LINK_FLAGS) $(SERVER_OBJS) libcmtd.lib \
$(LIBS) /DEF:Server.def
regsvr32 Server.dll
而我手动编译报的错是:
link /NOD /DLL /DEBUG /DEF:"SERVER.DEF" /IMPLIB:Server.lib Server.obj Cmpnt1.obj Cmpnt2.obj Cmpnt3.obj Registry.obj Cfactory.obj Cunknown.obj Util.obj Guids.obj libcmtd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /DEF:Server.def
Microsoft (R) Incremental Linker Version 12.00.21005.1
Copyright (C) Microsoft Corporation. All rights reserved.
正在创建库 Server.lib 和对象 Server.exp
Cmpnt1.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z),该符号在函数 "class std::ctype const & __cdecl std::use_facet >(class std::locale const &)" (??$use_facet@V?$ctype@D@std@@@std@@YAABV?$ctype@D@0@ABVlocale@0@@Z) 中被引用
Cmpnt2.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z)
........
Util.obj : error LNK2001: 无法解析的外部符号 "public: static class std::locale::id std::ctype::id" (?id@?$ctype@D@std@@2V0locale@2@A)
Cmpnt2.obj : error LNK2019: 无法解析的外部符号 __Getcvt,该符号在函数 "public: struct _Cvtvec __thiscall std::_Locinfo::_Getcvt(void)const " (?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ) 中被引用
Cmpnt3.obj : error LNK2001: 无法解析的外部符号 __Getcvt
Util.obj : error LNK2001: 无法解析的外部符号 "class std::basic_ostream > std::cout" (?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A)
Server.dll : fatal error LNK1120: 27 个无法解析的外部命令
例子中的COM控件我用win32DLL 把COM控件项目做成功后,把成功的源文件拷贝到别的目录下做手动编译,总是无法成功.
另外我把COM技术内幕第10章例子的源代码,和我分拆开做的win32DLL COM控件项目上传到百度云上去了,下面是地址:
http://pan.baidu.com/disk/home#path=%252Fapps%252F%25E6%258E%25A7%25E4%25BB%25B6
CHAP10.rar是第10章例子的源代码
SERVER.rar是我用win32DLL 做的COM控件,这个是成功
KJ手动编译.rar是我想要手动编译的,文件就是从SERVER.rar里面拷贝的
请高手指点!
可以的话把 KJ手动编译.rar下载后手动编译.