VS2008(C++)-控制台项目中LNK2005错误的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2008(C++)-控制台项目中LNK2005错误的问题相关的知识,希望对你有一定的参考价值。
我的文件结构是:
--<head.h>--
//定义类
--<function.cpp>--
//定义普通函数
--<main.cpp>--
//主函数
其中主函数和普通函数都用到类,而且已经在head.h中加宏编译:
#ifndef _HEAD_H_
#define _HEAD_H_
/*
...
*/
#endif
为什么有错误“error LNK2005:....(一些类中的public成员函数)在.obj中已定义”之类的话,而如果把普通函数的定义放到主函数文件中没错了呢?
应该这样写:新建一个function.h,里面写上函数的声明,比如:int add(int a,int b);(注意还要写#ifndef _HEAD_H_
#define _HEAD_H_之类的语句防止重复包含,另防止重复包含的简单方法是写上一句:
#progma once)
然后在function.cpp里面实现.
以后凡是要用到function里面的函数,直接包含function.h就可以了 参考技术A VS2008合vs2005在避免头文件重复编译时
采用了另一种宏#pragma once
你用这个看看
VS2013 C++ LINK:致命错误 LNK1104:无法打开文件“mfc110ud.lib”
【中文标题】VS2013 C++ LINK:致命错误 LNK1104:无法打开文件“mfc110ud.lib”【英文标题】:VS2013 C++ LINK : fatal error LNK1104: cannot open file 'mfc110ud.lib' 【发布时间】:2015-12-08 14:16:58 【问题描述】:问题的背景(历史):
-
从 VC6 到 VS2008 再到 VS2012(全部为 32 位)升级(和微调)这个 50+k 行 C++ 项目后一切正常
升级到 VS2013 (Premium) 以兼容 3rd 方程序,一切都很好,经过(痛苦的)微调到 Unicode,除了:Edit and Continue (EnC) 不再工作。
论坛上有几篇关于报告的 EnC 问题的帖子,其中一篇建议在 VS2013 'Ultimate' 中可以使用一项设置(即禁用新的 IntelliTrace,仅在该版本中可用)。注意:MSFT 在 VS2015 中显然已经解决了这个问题,但是第 3 方程序尚未针对该版本进行验证。
安装了VS2013 Ultimate:一切都很好,但EnC仍然无法正常工作,并且非常想念,例如在微调对话框时;因此在 VS2012 中重新打开项目(以便能够使用 EnC),并将 Project > Properties > Config > General > Platform Toolset 更改为“VS110”(VS2012 的名称):
--> LINK : 致命错误 LNK1104: 无法打开文件 'mfc120ud.lib' (注意:这是 'VS2013' 平台的 MFC 调试 Unicode dll 库)
现在,当我在 VS2013 IDE 中重新打开项目时,使用相同的 VS110 平台工具集,在构建时会弹出相同的错误,
当我将平台工具集更改为“VS120”(VS2013 的名称)时,错误变为 LINK:致命错误 LNK1104:无法打开文件“mfc110ud.lib”,这是 VS2012 的 MFC 调试 Unicode 库。 ..
我发现错误的切换和环境令人费解。最后三个步骤是可重复的。 IDE 在任何更改之前关闭。操作系统重新启动会改变什么,如果是,为什么?是否应该删除配置文件(如 .vcxproj、.vcxproj.user、.suo、.sdf、.sln 或其他文件)?
我们将不胜感激所有有助于理解和修复此行为的帮助。
【问题讨论】:
...好吧,我找到了让它再次工作的方法:构建 > 清洁解决方案,然后构建 > 构建解决方案。 这个重建项目编译和链接没有眨眼。但是,这会指向一些隐藏在编译对象中的配置元素吗?我仍然对你的想法感兴趣。干杯。 不是配置,链接需求嵌入在编译器创建的.obj文件中。 MFC 标头包含一个#pragma 注释,以确保链接正确的.lib 文件。因此,如果您切换编译器版本但又没有确保从干净的构建开始,那么您将遇到此问题。可能需要手动删除预编译的头文件 (.pch)。 【参考方案1】:问题是“字符集”。每个字符集都将构建自己的 *.dll。您必须在“Project -> Properties -> ConfigurationProperties -> Common -> ProjectDefault -> CharSet”中选择“MBCS”而不是“Unicode”。
【讨论】:
【参考方案2】:我使用的是 VS2012,而我尝试将平台更改为 Win32。错误得到了修复。
【讨论】:
以上是关于VS2008(C++)-控制台项目中LNK2005错误的问题的主要内容,如果未能解决你的问题,请参考以下文章
由于其他依赖库,在 VS2010 中链接 googleTest 会导致 LNK2005
VS2017项目升级 error LNK2005: "public: __thiscall ATL::CTime::
在将大型 C++ 程序从 VS2005 转换为 VS2008 之前我应该知道啥?