yeyingting30 2015-08-21 12:09 采纳率: 66.7%
浏览 2115
已结题

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

这几天做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条回答

  • yeyingting30 2015-08-21 12:13
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题