在静态库中使用MFC的工程中,使用CPPToolTip类编译时为什么大堆报错error LNK2005:*已经在*.obj 中定义,而动态使用则没有问题?

时间:2021-08-20 20:49:20
1>------ 已启动生成: 项目: TipTest, 配置: Debug Win32 ------
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>TipTest.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>TipTestDlg.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>CeXDib.cpp
1>PPDrawManager.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\ppdrawmanager.cpp(911) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>PPHtmlDrawer.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(846) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(951) : warning C4996: 'wcscpy': This function or variable may be unsafe. Consider using wcscpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\string.h(252) : 参见“wcscpy”的声明
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(1788) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(2570) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(2838) : warning C4996: 'wcscpy': This function or variable may be unsafe. Consider using wcscpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\string.h(252) : 参见“wcscpy”的声明
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(3479) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.cpp(4424) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>PPTooltip.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pphtmldrawer.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.cpp(846) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.cpp(1744) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>正在生成代码...
1>正在编译资源...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>正在链接...
1>uafxcwd.lib(wincore.obj) : error LNK2005: _IsPlatformNT 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _InitMultipleMonitorStubs 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xGetSystemMetrics@4 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xMonitorFromPoint@12 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xMonitorFromRect@8 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xMonitorFromWindow@8 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xGetMonitorInfo@8 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xEnumDisplayMonitors@16 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _xEnumDisplayDevices@16 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnGetSystemMetrics 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromWindow 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromRect 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromPoint 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnGetMonitorInfo 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnEnumDisplayMonitors 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_pfnEnumDisplayDevices 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_fMultiMonInitDone 已经在 PPTooltip.obj 中定义
1>uafxcwd.lib(wincore.obj) : error LNK2005: _g_fMultimonPlatformNT 已经在 PPTooltip.obj 中定义
1>C:\Users\kezhon\Desktop\TipTest\Debug\TipTest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>生成日志保存在“file://c:\Users\kezhon\Desktop\TipTest\TipTest\Debug\BuildLog.htm”
1>TipTest - 19 个错误,19 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

17 个解决方案

#1


为什么静态使用MFC就出现Link报错,动态则没事,问题怎么解决?

#2


选择重新编译

#3


引用 2 楼 zyyoung 的回复:
选择重新编译
不灵啊,还是老样!!!

#5


头文件声明,cpp文件定义。

#6


引用 5 楼 Mackz 的回复:
头文件声明,cpp文件定义。
什么意思???

#7


在 Project/Setting/Link/General中的 Project Options: 加入 /FORCE:MULTIPLE即可。

#8


编译选项中 排除依赖库 uafxcwd.lib 试试

#9


该文件包含不能在当前代码页(936)中表示的字符

该字符最好替换成其他的

#10


引用 8 楼 TechiceY 的回复:
编译选项中 排除依赖库 uafxcwd.lib 试试
我的是vs2008中文版,没找到你说的位置啊~~

#11


属性设置中有设置引入库的地方,选择静态库,需要加头文件,在本地也要有这个库的lib和dll

#12


引用 11 楼 jzww2003 的回复:
属性设置中有设置引入库的地方,选择静态库,需要加头文件,在本地也要有这个库的lib和dll
能不能说详细点~~,而且我加的这个类是几对.h和.cpp的文件,不是dll

#13


检查定义的地方,定义的具体位置出问题了

#14


支持5楼..静态应该用不到def...要在自己的.h里声明导出函数..

#15


引用 14 楼 tccqs 的回复:
支持5楼..静态应该用不到def...要在自己的.h里声明导出函数..
我怎么看不懂你俩说的~~

#16


你编译的时候没有error C2664: 'GetColorByName' : cannot convert parameter 1 from 'char [1]' to 'const unsigned short *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast这种错误吗?

#17


引用楼主 kezhon 的回复:
C/C++ code
1>------ 已启动生成: 项目: TipTest, 配置: Debug Win32 ------
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>TipTest.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.h : warning C4819: 该文件包含不能在当前代码页(936)……

你是项目/属性/MFC的使用 : 在静态库中使用 MFC 了吧. 需要改一下

在文件 PPtooltip.cpp:
找到
#define COMPILE_MULTIMON_STUBS
去掉即可.
更多的使用在
http://www.codeproject.com/KB/miscctrl/pptooltip.aspx

#1


为什么静态使用MFC就出现Link报错,动态则没事,问题怎么解决?

#2


选择重新编译

#3


引用 2 楼 zyyoung 的回复:
选择重新编译
不灵啊,还是老样!!!

#4


#5


头文件声明,cpp文件定义。

#6


引用 5 楼 Mackz 的回复:
头文件声明,cpp文件定义。
什么意思???

#7


在 Project/Setting/Link/General中的 Project Options: 加入 /FORCE:MULTIPLE即可。

#8


编译选项中 排除依赖库 uafxcwd.lib 试试

#9


该文件包含不能在当前代码页(936)中表示的字符

该字符最好替换成其他的

#10


引用 8 楼 TechiceY 的回复:
编译选项中 排除依赖库 uafxcwd.lib 试试
我的是vs2008中文版,没找到你说的位置啊~~

#11


属性设置中有设置引入库的地方,选择静态库,需要加头文件,在本地也要有这个库的lib和dll

#12


引用 11 楼 jzww2003 的回复:
属性设置中有设置引入库的地方,选择静态库,需要加头文件,在本地也要有这个库的lib和dll
能不能说详细点~~,而且我加的这个类是几对.h和.cpp的文件,不是dll

#13


检查定义的地方,定义的具体位置出问题了

#14


支持5楼..静态应该用不到def...要在自己的.h里声明导出函数..

#15


引用 14 楼 tccqs 的回复:
支持5楼..静态应该用不到def...要在自己的.h里声明导出函数..
我怎么看不懂你俩说的~~

#16


你编译的时候没有error C2664: 'GetColorByName' : cannot convert parameter 1 from 'char [1]' to 'const unsigned short *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast这种错误吗?

#17


引用楼主 kezhon 的回复:
C/C++ code
1>------ 已启动生成: 项目: TipTest, 配置: Debug Win32 ------
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>TipTest.cpp
1>c:\users\kezhon\desktop\tiptest\tiptest\pptooltip.h : warning C4819: 该文件包含不能在当前代码页(936)……

你是项目/属性/MFC的使用 : 在静态库中使用 MFC 了吧. 需要改一下

在文件 PPtooltip.cpp:
找到
#define COMPILE_MULTIMON_STUBS
去掉即可.
更多的使用在
http://www.codeproject.com/KB/miscctrl/pptooltip.aspx