由于我最近调整了一下 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的更多相关文章

  1. SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据

    SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据 我总结的步骤 红色请注意它们的含义. 步骤1:连接到SQL DBS 上的SharePoint 2010数据 ...

  2. Sharepoint 2010、Sharepoint 2013浏览器打开CAD(.dwg)

    客户端配置 1.安装FreeDWGViewer.exe,设置浏览器查看 2.检查ActiveX插件是否已安装成功 服务端配置 1.开启许可模式或者通过脚本将"application/acad ...

  3. Qt :编译警告 LNK4042对象被多次指定,已忽略多余的指定 ....segmentLayout.obj

    解决办法: 步骤: 1.将segmentLayout.h .segmentLayout.cpp 从工程中删除(no  permanently delete),并清理工程 2.在代码文件目录重命名seg ...

  4. Upgrade from SharePoint 2010 to SharePoint 2016

    [转]http://nikcharlebois.com/upgrade-from-sharepoint-2010-to-sharepoint-2016/ In this blog, I will go ...

  5. SharePoint 2010 文档管理系列之文档搜索

    前言:如果一个文档库里面有很多文档,成千上万,对我们来说查找就是个麻烦事儿,所以搜索的必要性就体现出来了.下面,我们简单的介绍下,sharepoint搜索配置,并创建一个简单的搜索页面. 一. 配置S ...

  6. SharePoint 2013 REST 以及 OData 基础

    这篇文章会介绍: 简单的介绍REST,OData OData实现细节 OData在SharePoint 2013中的实现 为什么REST很重要 过去几年基于REST的webservice在IT企业越来 ...

  7. Office升级到2013版后无法登录微软账号问题

    自打office从2010版升级到2013版,就再也无法登录微软账号了.每次点击登录,弹出来的框就显示:this feature has been disabled by your administr ...

  8. 美国政府关于Google公司2013年度的财务报表红头文件

    请管理员移至新闻版块,谢谢! 来源:http://www.sec.gov/ 财务报表下载↓ 此文仅作参考分析. 10-K 1 goog2013123110-k.htm FORM 10-K   UNIT ...

  9. SharePoint 2013的100个新功能之场管理

    一:改进的SPSite命令 SharePoint 2013中对SPSite PowerShell命令行做了改进提升,使网站集操作更简便.比如,一个新的参数“HostHeaderWebApplicati ...

随机推荐

  1. grunt入门讲解1:grunt的基本概念和使用

    Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.老版本的 Node. ...

  2. PAT 甲级 1090 Highest Price in Supply Chain

    https://pintia.cn/problem-sets/994805342720868352/problems/994805376476626944 A supply chain is a ne ...

  3. Linux命令(四)删除文件 rm

    用户可以使用 rm 命令删除不需要的文件. rm 可以删除文件或目录,并且支持通配符. 如果目录中存在其它文件则会递归删除. 删除软链接只是删除链接,对应的文件或目录不会被删除. 软链接类似于 win ...

  4. wifi 标准

    简介 https://smb.pconline.com.cn/1149/11491365.html

  5. layout图形化界面看不到内容 Failed to find the style corresponding to the id

    1.问题 在创建新的工程的时候,选择目标SDK为api21,编译SDK为api23.创建出来的layout文件图形化界面中看不到,并且报错: Failed to find the style corr ...

  6. DELPHI 数据集在内存中快速查询方法

    1.Bookmark var p:pointer; procedure TForm1.Button1Click(Sender: TObject);//加个标签 begin   p:=cxGrid1DB ...

  7. python的logging日志模块

    1. 简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info mess ...

  8. java虚拟机的内存划分

    为了提高运算效率,就对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式. 一. 1.jvm的内存划分: 区域名称 作用 寄存器 给cpu使用,和我们开发无关 本地方法栈 jv ...

  9. 获取C++类成员虚函数地址

    1.GCC平台 GCC平台获取C++成员虚函数地址可使用如下方法[1]: class Base{ int i; public: virtual void f1(){ cout<<" ...

  10. 界面编程之QT的基本介绍与使用20180722

    /*******************************************************************************************/ 一.qt介绍 ...