COM控件编译连接成功 但手动编译总是失败 请高手指点下 1C

这几天做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下载后手动编译.

7个回答

上面那粗大的util.cpp compiled for server.是怎么上去的,我没写这个啊,请高手忽略这一行吧!

再看了一下,网页居然自动屏蔽了一个#号,那里本来是#util.cpp compiled for server.我汗啊!

我 去,第一次发链接居然发错了,下面那三个RAR的正确的链接:
http://pan.baidu.com/s/1eQi3oye

高手,KJ手动编译.rar下载后手动编译再压缩传到网上给我参考下,谢谢!!!!!!!!!!!!!,随便什么网盘都可以,用QQ也可以,我的QQ792594315

看上去是std标准库的lib读给没有添加link起来

oyljerry

要怎么办啊

用VS2013做控件没事,手动编译不行,手动编译还加上什么.lib文件啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问