vc编译warning LNK4089和链接警告LNK4098解决方法

一、warning LNK4089

vc编译时Debug版本下没问题,release版本下出现如下警告:
LINK : warning LNK4089: all references to “ODBC32.dll” discarded by /OPT:REF
LINK : warning LNK4089: all references to “ADVAPI32.dll” discarded by /OPT:REF
LINK : warning LNK4089: all references to “SHELL32.dll” discarded by /OPT:REF
LINK : warning LNK4089: all references to “comdlg32.dll” discarded by /OPT:REF
解释:你没有引入xxx.dll中的任何东西,链接器做优化不再链接他,这有助于减小可知性文件的体积。
解决方法:其实不用管这种警告,如下方法可以去除警告:在project–>project setting–>link(tab)–>Project Options
最后面加上/opt:noref可去除警告。
貌似第二种警告也可以用这个方法去除。

二、warning LNK4098

LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
你试图链接相互不兼容的库。

重要提示   目前运行时库包含预编译指令来阻止混合不同类型库的链接。如果你试图在同一个程序中使用不同类型的或者调试/非调试版本的运行时库,你将看到这个警告。举个例子,如果你编译一个文件使用某个类型的运行时库,而别的文件使用另外一个类型(例,单线程版本和多线程版本),那么在你试图链接它们的时候,你将看到这个警告。你应该使用相同的运行时库来编译所有的源文件。参阅MSDN中的Use Run-Time Library 章节了解关于(MD, /ML, /MT, /LD)编译开关的更多信息。

你可以使用链接开关/VERBOSE:LIB来了解链接器在搜索哪个库。如果你试图创建一个使用单线程非调试版本运行库的执行文件时收到LNK4098警告,那么使用/VERBOSE:LIB参数来找出链接器在搜索哪个库。链接器应该列出搜索的库LIBC.LIB,而不是LIBCMT.LIB, MSVCRT.LIB, LIBCD.LIB, LIBCMTD.LIB, 或者MSVCRTD.LIB等库。你可以通过在VC开发环境项目 Project 设置 Settings 链接Link 页面中的Ignore Libraries编辑框中输入不正确的运行时库名告诉链接器忽略这些运行时库,或者可以使用/NODEFAULTLIB:library 的链接开关来忽略那些不正确的库。参阅MSDN中 Ignore Libraries 章节了解(/NODEFAULTLIB)链接开关的更多信息。

下面的表中列出了在你选择不同运行时库时应该被忽略的库。

使用的运行时库 被忽略的库
单线程 (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
多线程 (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
多线程DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
调试版单线程 (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
调试版多线程 (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
调试版多线程DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

举例,如果你试图创建一个使用单线程非调试版运行时库的执行文件时,收到这个警告信息,你可以使用下面参数来链接:

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB

via:
http://www.cnfgg.com/article/Vc/vc_warningLNK4089.htm  
http://blog.csdn.net/vocanicy/archive/2008/05/15/2449691.aspx

本文永久链接  http://www.houkai.com/?p=182003
转载注明来自  HOUKAI.COM 分享家:Addthis中国

我的台式机配置,I7和志强的比较»

«增肥秘方——酒酿煮蛋的做法




最新文章

本文共有12评论

  1. 那个cookies记住当前用户信息怎么弄啊

  2. @云在天边
    看comment.js 好像只修改了
    if (commentuser){
    var info=commentuser.split('#@#');
    $('#author').val(info[0]);
    $('#email').val(info[1]);
    $('#url').val(info[2]);
    $('#checkarea').hide();}
    else
    就支持IE了!

  3. @houkai
    o(︶︿︶)o 唉,我改了,还是记不住啊

  4. 我是来点广告的~

  5. @云在天边
    这个直接用js写个记录cookie比较好~~houkai搞桌面软件开发了?有钱途啊可怜

  6. 现在用什么版本vc啊
    vc6还是2008啊,听说2010出了,不知道哪里有下载的

  7. @YUXIM.com
    我都用 在xp mode下 用 vc6.0 在windows7下用 2008.
    www.houkai.com/2009/09/3/original-windows.html 里面的dreamspark里面有vs2010不过是现在还是beta版

  8. @ikeeptrying
    谢谢 互点一下 点点更健康大笑

  9. @云在天边
    那用 http://gae-django-cms.appspot.com/ 里面的cookies代码 我早的时候就是用他主题里的代码 也可以

  10. 没有看懂,呵呵呵

 

现在评论本文

5+8