VC MFC编译连接常见错误汇总

1. 错误一

(1) 错误举例

  错误 4 error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 D:\work\codes\vad_sdk_soundrecord_ocx\vad_sdk_soundrecord_ocx\AsrControl\mfcs120ud.lib(dllmodul.obj) AsrControl

 错误 5 error LNK1169: 找到一个或多个多重定义的符号 D:\work\codes\vad_sdk_soundrecord_ocx\vad_sdk_soundrecord_ocx\bin\AsrControl.ocx 1 1 AsrControl

(2) 分析

         简单地说,就是产生错误的工程同时使用了CRT库和MFC库,并且链接顺序不对,CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

         以上错误可以看出在链接库mfcs120ud.lib的时候,发现_DllMain已经在MSVCRTD.lib中已经定义

  在“项目 -> 属性 -> 链接器 -> 命令行”栏中,输入 /verbose:lib编译参数,这样,就可以在output窗口看到链接时搜索的库的先后顺序,对于本问题,你一定可以看到类似下面的先后输出:

1>  正在搜索库
1>      正在搜索 D:\work\codes\vad_sdk_soundrecord_ocx\vad_sdk_soundrecord_ocx\bin\libusc.lib: 
1>      正在搜索 ..\gvad\gvad.lib: 
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\msvcprtd.lib: 
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\MSVCRTD.lib: 
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\OLDNAMES.lib: 
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\mfc120ud.lib: 
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\mfcs120ud.lib: 

1>mfcs120ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义

       通过以上依赖关系可以看出:编译器先链接MSVCRTD.lib库,后链接mfcs120ud.lib,然后链接mfcs120ud.lib的时候报错了

(3) 解决方法

      让编译器先链接mfcs120ud.lib,后链接MSVCRTD.lib即可解决

在“项目->属性->连接器->输入->附加依赖项”,追加:mfcs120ud.lib;MSVCRTD.lib;

    搞定!


猜你喜欢

转载自blog.csdn.net/hsy12342611/article/details/80066843
vc
今日推荐