warning lnk4098: defaultlib libcmt conflicts with use of other libs; use / nodefaultlib:library 在同一个项目中,所有的源文件必须链接相同的 c 运行时库。如果某一文件用了 multithreaded dll 版本,而其他文件用了 single-threaded 或者 multithread
warning lnk4098: defaultlib libcmt conflicts with use of other libs; use /nodefaultlib:library
在同一个项目中,所有的源文件必须链接相同的c运行时库。如果某一文件用了multithreaded dll版本,而其他文件用了single-threaded或者multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。
原因找到了。那么解决方法,总之就是将两个项目的运行时库统一。
简单的方式就是将项目的动态库修改为使用multithreaded dll 版本的c运行时库即可。
某些情况下你的项目可能不能改变当前的运行时库,vc中的c运行时库一共有6种,想了解更多信息可以参阅我先前翻译的文章。
single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
multithreaded using dll (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
debug single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
debug multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
debug multithreaded using dll (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib
例如编译release版本的单线程的工程,在linker的命令行加入如下的参数:
/nodefaultlib:libcmt.lib /nodefaultlib:msvcrt.lib /nodefaultlib:libcd.lib /nodefaultlib:libcmtd.lib /nodefaultlib:msvcrtd.lib
由于这个项目是添加htmlhelp.lib后而得到的warning,所以应该做如下更改,选择project -> setting,出现project setting对话框,单击linkproject options中添加如下即可。
/nodefaultlib:libc.lib /nodefaultlib:libcmt.lib /nodefaultlib:msvcrt.lib /nodefaultlib:libcd.lib /nodefaultlib:libcmtd.lib
jsp 拦截器写法,最大的问题是把注入搞没了,我勒个去,暂时无解
