C Runtime

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
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提供了统一的支持. 

warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library 1>LINK : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library 阅读详情

相关推荐

LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

VS2013运行MFC程序错误提示 LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library 解决方法: 编译选项设置如下: 1、【项目】->【属性】->【配置属性】->【C/C++】->【代码生成】->【运行时库】,设置为“多线程DLL(/MD) 2、【项目】->【属性】-&g...

耶律大石的博客 2万+

warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;使用 /NODEFAULTLIB:library问题解决方法

使用VS2003编译程序提示如下警告信息: warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;使用 /NODEFAULTLIB:library 编译选项设置如下: 【项目】->【属性】->【配置属性】->【C/C++】->【代码生成】->【运行时库】,设置为“多线程DLL(/MD) 解决方法: 【项目】->【属性】->【配置属性】->【连接器】->【输入】-

wwfish的专栏 2万+

Microsoft Visual C++ Runtime Library Runtime Error的解决办法

打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步估计是软件冲突,可能有多种出错的方式,我的是浏览器自动关闭。 一、 有些时候,在你安装、运行某个软件,可能会得到这样一个错误提示:   Microsoft Visual C++ Runtime Library   Runtime Error!   Program:c:/w...

m0_54409538的博客 9万+

C Runtime Library、C  Runtime

1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UN...

weixin_34221073的博客 1760

Objective-C 的 Runtime

前言 本文为通识性的文章,并且会不断更新,如果有什么地方不懂的或者有需要补充的以及不太正确之处可以留言,我会补上的,谢谢各位!~ OC是一门动态的语言,它将很多静态语言在编译和链接时期做的事情放到了运行时来处理。这样的动态语言优势在于:写代码时更具灵活性。 e.g. 我们可以把消息转发给我们想要的对象,或者随意更换一个方法的实现等。 OC的这种特性使得他不仅仅需要一个编译器,还需要一个运行时

小明的博客 510

c语言runtime是什么错误,深入浅出Runtime (一) 什么是Runtime? 定义?

深入浅出 Runtime详解Runtime是什么?运行时(Runtime)是指将数据类型的确定由编译时推迟到了运行时Runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime是Object-C的幕后工作者Object-C需要Runtime来创建类和对象,进行消息发送...

weixin_28704239的博客 1194

object c runtime的学习

// // main.m // RuntimeFunctionApplication // // Created by 千雅爸爸 on 16/10/7. // Copyright © 2016年 kodulf. All rights reserved. // #import #import #import "Person.h" #import int main(int argc,

Kodulf的专栏 587

Objective-C Runtime

Objective-C Runtime 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机。主要内容如下: 引言 简介 与Runtime交互 Runtime术语 消息 动态方法解析 消息转发 健壮的实例变量(Non Fragile ivars) Objective-C Ass

cactusz的博客 522

Objective-C Runtime整理学习

Objective-C Runtime整理学习1、引言2、简介3、与Runtime交互1、Objective-C源代码2、NSObject的方法3、Runtime的函数4、Runtime术语1、SEL2、id3、Class4、Method5、Ivar6、IMP7、Cache8、Property5、消息1、objc_msgSend函数2、方法中的隐藏参数3、获取方法地址6、动态方法解析7、消息转发1、重定向2、转发3、转发和多继承4、替代者对象(Surrogate Objects)5、转发与继承8、健壮的实例

烈马痴情葱的博客 1001

Objective-C Runtime 介绍

Objective-C Runtime 最近项目里面有需要屏蔽系统弹出的alertController,上网找了一下方法,发现OC有Runtime的方法可以实现,后来就研究了一下Runtime,在此做一下总结。 既然不知道Runtime是究竟个什么东东,那照惯例先从苹果的开发文档下手。 Overview The Objective-C runtime is a runtime...

Bruce的博客 497

Objective-C Runtime介绍

Objective-C Runtime中的meta-classObjective-C Runtime引子获取实例方法关于IMP和Method Objective-C Runtime objective-c是mac osx下的编程语言,其中Runtime库为oc语言的动态属性提供支持,因此所有通过oc编译的应用程序都可以连接到该库。 应用程序连接到runtime库,需要引入runtime头文件。 #...

WeinKee的博客 517

Objective-C Runtime机制详解

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时做的事放到了运行时来处理。同时OC也是一门简单的语言,很大一部分是C的内容,只是在语言层面上加了关键字和语法,真正让OC强大的是它的运行时,它很小却很强大,其中核心是消息分发。这种动态语言的优势在于:我们写代码时更加灵活,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现。      这种特性意味着OC不仅需要

乞力马扎罗的雪CYF的博客 5539

理解 Objective-C Runtime

当人们初学 Cocoa/Objective-C 时,Objective-C Runtime 是被忽略的特性之一。原因是 Objective-C(这门语言)很容易在几小时内就熟悉,新学 Cocoa 的人花费他们大部分的时间学习 Cocoa 框架和适应它是如何工作的。然而每个人至少应该知道一些 runtime 的工作细节,需要比知道编译器会把 [target doMethodWith:var1];  

Flying_in_the_world的专栏 2090
上一篇: 各大有名库的介绍
下一篇: 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
luozhan
博客等级 码龄19年 6粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值