关于 VS 2010 和 VS 2013 的警告 LNK4042
由于我最近调整了一下 Jimi 的文件结构,导致出现了一个 LNK4042 的 warning,我并没有很重视,这个 warning 导致出现了一些错误。
我调试了几个小时,一开始并没有想到是这个 warning 造成的,以为是我改代码改出来的问题(因为最近做了大量调整),特此记录一下。
我在调整代码结构的时候,出现了这么两个文件 assert.cpp 和 assert.c,之前分别叫 jimi_assert.cpp 和 jimic_assert.c,所以相安无事,
没有出现这个问题。而且由于是定义的 assert 函数,所以这个问题在 Release 版下不会有问题,在编译 Debug 版的时候才会出现,提示如下:
>G:\Project\OpenSrc\Jimi_Root\Jimi\gen\tmp\vc2013\Jimi_static\x86-Debug\assert.obj : warning LNK4042: 对象被多次指定;已忽略多余的指定
这会导致下面这个错误:

这是 C 里用到的 jimic_assert() 的链接错误,有时候,还会报 C++ 里的 jimi::assertion_failure() 的链接错误,
即 jimi_assert(),这两个错误出现的机率有一定随机性(只会出现一个),所以也导致我调试了几个小时……。
我们来 Google 一下 “LNK 4042”,在 CSDN 查到一个中文的:VS2010 警告 LNK4042 截图如下:

试了一下,没解决问题,继续搜,在 stackoverflow 上找到了 Visual Studio 2010's strange “warning LNK4042” ,
还有 MSDN: Linker Tools Warning LNK4042 里提到的: Visual Studio 2010 & 2008 can't handle source files with identical names in different folders? ,
原来造成这个 warning 和错误的原因是:assert.c 和 assert.cpp 生成的 obj 文件名重叠了,导致编译的时候只能链接其中一个,因为另外一个因为文件名一样被覆盖掉了。
最简单的解决办法就是让两个文件的文件名不一样,我把 assert.c 改名为 assert-c.c 后,就解决了。
但是有些时候的确是有可能在不同的文件夹下面使用相同的文件名的,所以这种方法不能一劳永逸。这个问题是因为默认的情况下,所有的 obj 都生成到同一个文件夹里,所以可以单独的指定某个文件的 obj 生成路径,这样就不会被覆盖了。在VS里选定你要改的文件,然后右键->点“属性”,示例如下:

把 对象文件名 由:Obj$(IntDir) 改为 Obj$(IntDir)\你想修改的路径 或 obj文件名,例如上图中的:Obj$(IntDir)\jimic_assert\ 或者 Obj$(IntDir)\jimic_assert.obj。、
有一点需要注意的是,最好选择“所有配置”,把 "Release" 和 "Debug" 或 其他配置都一起改了。
当然,想简单一点,还是改文件名比较快。。。
如果还有什么疑问,可以去看看那两个 stackoverflow.com 的帖子。
(完)
关于 VS 2010 和 VS 2013 的警告 LNK4042的更多相关文章
- SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据
SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据 我总结的步骤 红色请注意它们的含义. 步骤1:连接到SQL DBS 上的SharePoint 2010数据 ...
- Sharepoint 2010、Sharepoint 2013浏览器打开CAD(.dwg)
客户端配置 1.安装FreeDWGViewer.exe,设置浏览器查看 2.检查ActiveX插件是否已安装成功 服务端配置 1.开启许可模式或者通过脚本将"application/acad ...
- Qt :编译警告 LNK4042对象被多次指定,已忽略多余的指定 ....segmentLayout.obj
解决办法: 步骤: 1.将segmentLayout.h .segmentLayout.cpp 从工程中删除(no permanently delete),并清理工程 2.在代码文件目录重命名seg ...
- Upgrade from SharePoint 2010 to SharePoint 2016
[转]http://nikcharlebois.com/upgrade-from-sharepoint-2010-to-sharepoint-2016/ In this blog, I will go ...
- SharePoint 2010 文档管理系列之文档搜索
前言:如果一个文档库里面有很多文档,成千上万,对我们来说查找就是个麻烦事儿,所以搜索的必要性就体现出来了.下面,我们简单的介绍下,sharepoint搜索配置,并创建一个简单的搜索页面. 一. 配置S ...
- SharePoint 2013 REST 以及 OData 基础
这篇文章会介绍: 简单的介绍REST,OData OData实现细节 OData在SharePoint 2013中的实现 为什么REST很重要 过去几年基于REST的webservice在IT企业越来 ...
- Office升级到2013版后无法登录微软账号问题
自打office从2010版升级到2013版,就再也无法登录微软账号了.每次点击登录,弹出来的框就显示:this feature has been disabled by your administr ...
- 美国政府关于Google公司2013年度的财务报表红头文件
请管理员移至新闻版块,谢谢! 来源:http://www.sec.gov/ 财务报表下载↓ 此文仅作参考分析. 10-K 1 goog2013123110-k.htm FORM 10-K UNIT ...
- SharePoint 2013的100个新功能之场管理
一:改进的SPSite命令 SharePoint 2013中对SPSite PowerShell命令行做了改进提升,使网站集操作更简便.比如,一个新的参数“HostHeaderWebApplicati ...
随机推荐
- vm15安装esxi6.0
vmware 15安装esxi6.0时发现出现没有硬盘选择,导致无法安装 在vm12上安装正常 经过测试 1.需要在虚拟机硬件兼容性上选择12.x 2.版本也要选6.0,不要选6.X 其次,esxi要 ...
- Asp.Net Mvc的几个小问题
突然想到一些小问题,对写代码影响不大,当是又很实用. MVC 中视图中的model的大小写问题,什么时候用大写,什么时候用小写? 所谓强类型视图,就是通过@model指令指明当前Model(属性)的具 ...
- 一本通1632【 例 2】[NOIP2012]同余方程
1632:[ 例 2][NOIP2012]同余方程 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 求关于 x 的同余方程 ax≡1(mod b) 的最小正整 ...
- vue中的minix
minix 是个什么东西, 就是混合,把你混合给我 浅显表述就是 你说 : ‘我叫李四’, 我说 : ‘我叫张三’, 然后把你 混合给我, 就成了 我说 : ‘我叫张三我叫李四’, 所有解说都在例子里 ...
- 初征——NOIP2018游记
前言 从最初接触oi到今年noip到来,也已经将近有一年了.从对于程序一窍不懂到现在开始学习算法,只是短短的不到一年的时间罢了.这次noip,不仅仅是我oi生涯的第一次noip,更是相当于是对我这一年 ...
- Python【知识点】面试小点列表生成式小坑
1.问题 有这么一个小面试题: 看下面代码请回答输出的结果是什么?为什么? result = [lambda x: x + i for i in range(10)] print(result[0]( ...
- 【BZOJ1093】[ZJOI2007]最大半联通子图(Tarjan,动态规划)
[BZOJ1093][ZJOI2007]最大半联通子图(Tarjan,动态规划) 题面 BZOJ 洛谷 洛谷的讨论里面有一个好看得多的题面 题解 显然强连通分量对于题目是没有任何影响的,直接缩点就好了 ...
- sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符
select top 10 SUBSTRING( sproductcode, CHARINDEX('-', SProductCode)+1, LEN(SProductCode)) from csmr ...
- 学习3__STM32--DMA传输模式---
DMA传输模式 记录 2018-01-26 开始小记 > mode1: Peripheral to Memory 说明: 工程实现的云盘链接 > mode2: Memory to Peri ...
- 进程和线程(4)-进程 vs. 线程
进程 vs. 线程 我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点. 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负 ...