您的位置:首页 > 大数据 > 人工智能

调试: 编译错误, mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRT.lib(dllmai

2010-12-22 18:28 579 查看
起因:

程序是一个ocx工程,已经用在项目中了,很正常. 工程收尾的时候, 准备加入vss, 作为一个阶段性版本. 工程本身没动, 把调试程序时的外部依赖dll, exe这些二进制的东西删掉,减少体积, vss check in.

把原有工程删掉, 选了个新位置, vss check out.

再编译的时候,编译不过. 我明明没动源码工程, 怎么会这样呢? 以前遇到此类问题,就是不断的去实验调整Link选项.lib的顺序.有点茫然的感觉. 今天在MS官方站点上看到了一个方法, 解决问题的思路很清晰.



解决过程:

Link选项中加入/verbose:lib, 观察库链接顺序和Link出错位置.



库链接顺序和Link错误位置都看到了如下:

Searching Libraries    Searching C:/Program Files/Microsoft Visual Studio/VC98/LIB/uuid.lib:    Searching C:/Program Files/Microsoft Visual Studio/VC98/LIB/MSVCRT.lib:    Searching C:/Program Files/Microsoft Visual Studio/VC98/LIB/OLDNAMES.lib:    Searching C:/Program Files/Microsoft Visual Studio/VC98/MFC/LIB/mfc42.lib:    Searching C:/Program Files/Microsoft Visual Studio/VC98/MFC/LIB/mfcs42.lib:mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRT.lib(dllmain.obj)    Searching C:/Program Files/Microsoft Visual Studio/VC98/LIB/kernel32.lib:


根据出错信息,调整Link库的设置如下:



编译通过, 心情很好,完全没有以前那种,摸着石头过河的感觉~



同一个工程集合中又一个子工程Link报错, 用这种方法解决问题的速度真快



我很纳闷,原始的工程,我源码和设置都没动过,怎么能出现以前编译过,现在不调整设置就编译不过呢?



<2011_1020>

找到了vs2005中设置/verbose:lib的地方

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐