LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library-----有那位兄弟知道这样的

readi 2004-10-09 01:50:21
在我的程序中要用到一个特殊的库,其帮助文件的提示如下
1、Select Project|Update All Dependencies from the menu.
2、Select Project|Settings from the menu and click the C/C++ button.
3、Select Code Generation from the Category list box and select Multi-Threaded using DLL from the Use Run-Time Libraries list box. (VISA requires these definitions for Win32.) Click OK to close the dialog boxes.

我按其提示操作,但project菜单下没有相对应的 Update All Dependencies ,只有Dependencies ,感觉影响不大,跳过。在进行2、3步时,发现在Use Run-Time Libraries list box的选项中没有 Multi-Threaded using DLL,于是我选了比较接近的MultiThreaded DDL ,但在链接时就出现了题目中的警告提示,哪位兄弟帮我解解惑啊。
...全文
2073 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyqxz 2004-10-09
  • 打赏
  • 举报
回复
不好意思,能不能问一下/NODEFAULTLIB:library 写在哪儿啊
或者是在那里选的
刚学好多东西不懂
谢谢指教!
星羽 2004-10-09
  • 打赏
  • 举报
回复
呵呵  运行库 怎么能去啊
几乎每个程序 都用到他的很多函数
没有了他 你的程序铁定运行不了


不用谢 大家互相帮助
如何理解C run-time library (C运行时库)

1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.

2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 LIBRARY,C run-time library 就是这样形成的。

3)随后,随着 C 语言的流行,各个 C 编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的 Standard Library,但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别,所以就有了 ANSI C;ANSI C (主观意图上)详细的规定了 C 语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方 C 运行库(Third party C run-time libraries)。

4)C run-time library里面含有初始化代码,还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C run-time库,main()就不会被调用,exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。


5)到了 C++ 世界里,有另外一个概念:Standard C++ Library,它包括了上面所说的 C run-time library 和 STL。包含 C run-time library 的原因很明显,C++ 是 C 的超集,没有理由再重新来一个 C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括:LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB

6)Windows环境下,VC提供的 C run-time library又分为动态运行时库和静态运行时库。
动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build)
静态运行时库(release版)对应的主要文件是:
LIBC.LIB (Single thread static library, retail version)
LIBCMT.LIB (Multithread static library, retail version)

msvcrt.dll提供几千个C函数,即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时,很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时,VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件(libc.lib,libcmt.lib或Import library msvcrt.lib)链接进来。

编译时到底哪个C run-time library联入你的程序取决于编译选项:
/MD, /ML, /MT, /LD (Use Run-Time Library)
你可以VC中通过以下方法设置选择哪个C run-time library联入你的程序:
To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box.

从程序可移植性考虑,如果两函数都可完成一种功能,选运行时库函数好,因为各个 C 编译器的生产商对标准C Run-time library提供了统一的支持.




Mega1212 2004-10-09
  • 打赏
  • 举报
回复
不清楚……
能正常编译就好啦,别想太多。编译选项而已……

DentistryDoctor(雅克医生(潜心修内功)) 的帖子里已经列出来关于MSVCRT的信息了。
myblind 2004-10-09
  • 打赏
  • 举报
回复
MSVCRT取掉,只要程序能够正常编译,和运行就没有影响。^_^
readi 2004-10-09
  • 打赏
  • 举报
回复
谢谢上面的兄弟们,我下班前解贴。
我刚才试过了,加过/nodefaultlib:"MSVCRT" 之后就没有警告提示了,可是,我还想问一下,MSVCRT库去掉之后会对我的程序产生什么影响,它是做什么用的。而且好像把它去掉之后只能选择use mFC IN shared DLL了,why
memory_xj 2004-10-09
  • 打赏
  • 举报
回复
估计是编译链接的参数选项有问题,系统缺省使用的是Windows三大标准库,MSVCRT是其中之一,你在程序中使用了一个特殊的链接库,是不是系统要你在编译参数中明确指定不用缺省的标准链接库选项/NODEFAULTLIB。 ~~~~
hmsxg4160 2004-10-09
  • 打赏
  • 举报
回复
你看看http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/LNK4098.asp,
中文的。
memeno 2004-10-09
  • 打赏
  • 举报
回复
MSVCRT是运行库-->windows c runtime
DentistryDoctor 2004-10-09
  • 打赏
  • 举报
回复
Reusable Library Switch Library Macro(s) Defined
----------------------------------------------------------------
Single Threaded /ML LIBC (none)
Static MultiThread /MT LIBCMT _MT
Dynamic Link (DLL) /MD MSVCRT _MT and _DLL
Debug Single Threaded /MLd LIBCD _DEBUG
Debug Static MultiThread /MTd LIBCMTD _DEBUG and _MT
Debug Dynamic Link (DLL) /MDd MSVCRTD _DEBUG, _MT, and _DLL
DentistryDoctor 2004-10-09
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;en-us;140584
hmsxg4160 2004-10-09
  • 打赏
  • 举报
回复
NODEFAULTLIB:library 当链接器解析外部引用时使链接器忽略的库。 备注 /NODEFAULTLIB 选项通知链接器将一个或多个默认库从链接器解析外部引用时所搜索的库列表中移除。 默认情况下,/NODEFAULTLIB 从它解析外部引用时所搜索的库列表中移除所有默认库。可选 library 参数使您得以将指定的库从它解析外部引用时所搜索的库列表中移除。为每个要排除的库指定一个 /NODEFAULTLIB 选项。

默认库“library”与其他库的使用冲突;使用 /NODEFAULTLIB:library 您试图与不兼容的库链接。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧