关于 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 ...
随机推荐
- 什么是GPS的冷启动、温启动和热启动?
对于GPS多种启动方式的概念还很模糊,冷启动.热启动.温启动各种专业术语铺天盖地,使得许多用户眼花缭乱. 我们简单从定义上了解一下几种GPS启动的方式,GPS开机启动分为冷启动.温启动.热启动三种. ...
- Apache修改了配置文件中的路径后,登录该地址网页出现问题 (其中介绍了selinux的域和安全上下文)
默认的网站数据存放在: /var/www/html 首页名称: index.html Apache服务程序的主配置文件: /etc/httpd/conf/httpd.conf (若是将 119 行 ...
- Beta 冲刺 三
团队成员 051601135 岳冠宇 031602629 刘意晗 031602248 郑智文 031602330 苏芳锃 031602234 王淇 照片 项目进展 岳冠宇 ## 项目进展 昨天的困难 ...
- sysbench的安装与简单使用
1. 下载sysbench的文件 https://codeload.github.com/akopytov/sysbench/zip/1.0.15 2. 放进linux机器以及进行解压缩 unzip ...
- 【转】mysql优化步骤
作者:zhuqz链接:https://www.zhihu.com/question/19719997/answer/81930332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- c++中冒号(:)和双冒号(::)的用法
1.冒号(:)的用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; ...
- mybatis之一对一关联
MapperAsso.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper ...
- java旋转图片
/** * 旋转角度 * @param src 源图片 * @param angel 角度 * @return 目标图片 */ public static BufferedImage rotate(I ...
- requestMapping之地址映射
转:http://www.cnblogs.com/qq78292959/p/3760560.html 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时, ...
- 冒泡排序与选择排序(经典版)----java基础总结
前言:关于冒泡排序和选择排序,每次写的时候都要再看看他们的概念,这次,就自己写明白 1.冒泡排序: 其实冒泡排序应该用例子证明,设数组长度为N. 1.比较相邻的前后二个数据,如果前面数据大于后面的数据 ...