﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-caribbean</title><link>http://www.cppblog.com/caribbean/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:06:36 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:06:36 GMT</pubDate><ttl>60</ttl><item><title>摘抄的关于C_Runtime_Library的一写讨论</title><link>http://www.cppblog.com/caribbean/archive/2009/06/13/87586.html</link><dc:creator>xy</dc:creator><author>xy</author><pubDate>Sat, 13 Jun 2009 07:56:00 GMT</pubDate><guid>http://www.cppblog.com/caribbean/archive/2009/06/13/87586.html</guid><wfw:comment>http://www.cppblog.com/caribbean/comments/87586.html</wfw:comment><comments>http://www.cppblog.com/caribbean/archive/2009/06/13/87586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/caribbean/comments/commentRss/87586.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/caribbean/services/trackbacks/87586.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRT原先是指Microsoft开发的C Runtime Library，用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library，所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下，可以看到CRT的源码，不仅有C的，也有C++的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外，都是用C/C++编写的，所以内核及许多关键服务都在CRT上运行（它们都采用dll技术动态链接）。此外，用 VC编写的C/C++程序也用到它们（可以动态链接，也可以静态链接，前者运行时需要系统中已安装CRT的dll，后者不需要）。可以说，CRT就是 Microsoft编写Windows时使用的低层类库。然后，它又被当作C++标准库的一个实现包含在了VC系列中；我们在VC中使用的C++标准库，其实就是CRT的一个真子集（少了C++标准所不包含的代码，特别是大量的低层C代码）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至于CRT与WINDOWS API的关系，与许多人理解的相反，WINDOWS API作为Windows的一部份，是在CRT的基础上开发的。你可以将Windows（及其API）看作一个项目，而这个项目使用的语言是汇编/C/C ++，使用的类库就是CRT。所以，离开CRT，Windows API也无法使用的。<br>C++标准，是C++的通用语言规范，指导所有C ++使用者。而CRT的其中一部分可以看作是Microsoft开发的一个C++标准库实现（其实也确实如此，Microsoft在开发CRT时，参考了正在标准化过程中的C++语言规范）。它与C++标准有一定的差距，部分原因是，在C++没有完成标准化之前，CRT已经开发并投入使用了。为了向下兼容以前的Windows代码，早期的CRT与C++标准总有一定的差距。但是CRT确实在不断的改进中。VC6带的CRT与C++标准还有比较大的差距，而 VC8的几乎完全符合C++标准了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 综上，CRT（Microsoft's C/C++ Runtime Library）的一个真子集（主要是C++ Runtime Library）是一个符合（或至少是企图符合）C++标准的C++库。而Windows API（以及Windows的其他许多部分）都是在CRT的基础上开发的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了以上介绍的，在使用CRT的过程中，还需要了解的是：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、CRT的一些组成部分也调用了Windows API。这可能就是有人认为CRT是建立的Windows API基础上的原因。但是实际上，这一部分剥离CRT没有任何的问题。只不过Microsoft将在Windows平台上可以使用的C/C++低层库都加入到CRT中。因此，CRT中很大一部分是操作系统平台无关的（原始的CRT），是开发Windows本身及其上一切的基础。它们也可以作为一个C/C+ +库在其他操作系统平台上使用。还有一部分，则是和Windows紧密绑定的，调用Windows API来实现的，可以看作扩展的CRT。之所以将这两部分放在一起，是因为它们都是开发Windows操作系统所需要的，也因为它们也都是Windows 平台上的C/C++程序员所需要的。这种复杂关系是Microsoft的人为因素造成的，不能因此认为CRT是建立在Windows或Windows API基础上的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、CRT的大部分内容是跨硬件平台的，但是也有一些部分，是直接用汇编写成、基于硬件平台、并根据特定硬件平台做的优化（而不是将生成机器码的责任完全交给编译器）。如早期对Indel的x32做了优化，现在由加入对AMD64的优化，这部分则是不跨硬件平台的。<br>-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br><br>1)运行时库就是 C run-time library，是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. <br>2)C 语言是所谓的&#8220;小内核&#8221;语言，就其语言本身来说很小（不多的关键字，程序流程控制，数据类型等）；所以，C 语言内核开发出来之后， Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数，并且把其中最常用的部分独立出来，形成头文件和对应的 LIBRARY，C run-time library 就是这样形成的。 <br>3)随后，随着 C 语言的流行，各个 C 编译器的生产商/个体/团体都遵循老的传统，在不同平台上都有相对应的&nbsp; Standard Library，但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别，所以就有了&nbsp; ANSI C；ANSI C （主观意图上）详细的规定了 C 语言各个要素的具体含义和编译器实现要求，引进了新的函数声明方式，同时订立了&nbsp; Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数，应当称为第三方&nbsp; C 运行库（Third party C run-time libraries）。 <br>4)C run-time library里面含有初始化代码，还有错误处理代码(例如divide by zero处理)。你写的程序可以没有 math库，程序照样运行，只是不能处理复杂的数学运算，不过如果没有了C run-time库，main()就不会被调用，exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。 <br>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,&nbsp; LIBCPMT.LIB和 MSVCPRT.LIB <br>6)Windows环境下，VC提供的 C run-time library又分为动态运行时库和静态运行时库。 <br>动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build) <br>静态运行时库(release版)对应的主要文件是： <br>LIBC.LIB (Single thread static library, retail version) <br>LIBCMT.LIB (Multithread static library, retail version) <br>msvcrt.dll提供几千个C函数，即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时，很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时，VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件&nbsp; (libc.lib,libcmt.lib或Import library msvcrt.lib)链接进来。 <br>编译时到底哪个C run-time library联入你的程序取决于编译选项： <br>/MD, /ML, /MT, /LD&nbsp;&nbsp; (Use Run-Time Library) <br>你可以VC中通过以下方法设置选择哪个C run-time library联入你的程序： <br>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. <br>从程序可移植性考虑,如果两函数都可完成一种功能，选运行时库函数好,因为各个 C 编译器的生产商对标准C Run-time library提供了统一的支持.<br>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br><br>
<img src ="http://www.cppblog.com/caribbean/aggbug/87586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/caribbean/" target="_blank">xy</a> 2009-06-13 15:56 <a href="http://www.cppblog.com/caribbean/archive/2009/06/13/87586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MATLAB Add-in 和matcom add-in</title><link>http://www.cppblog.com/caribbean/archive/2009/03/24/77781.html</link><dc:creator>xy</dc:creator><author>xy</author><pubDate>Tue, 24 Mar 2009 13:52:00 GMT</pubDate><guid>http://www.cppblog.com/caribbean/archive/2009/03/24/77781.html</guid><wfw:comment>http://www.cppblog.com/caribbean/comments/77781.html</wfw:comment><comments>http://www.cppblog.com/caribbean/archive/2009/03/24/77781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/caribbean/comments/commentRss/77781.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/caribbean/services/trackbacks/77781.html</trackback:ping><description><![CDATA[MATLAB Add-in 的安装过程：&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 启动Matlab，运行"mex -setup"，按照菜单提示选取MSVC。它将配置MEX使用VC为默认的编译器(创建C-MEX文件必需)，并安装Matlab Add-in所需文件到VC目录。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 在Matlab环境下运行"cd(prefdir)"和"mccsavepath"。它将保存当前Matlab路径到mccpath文件中，这是因为Matlab Add-in脱离Matlab运行，否则它无从知道Matlab路径。 　　&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3. 在Matlab环境下运行"mbuild -setup", 按提示选取MSVC。它将配置使用VC为默认的编译器(创建独立应用程序必需)，并安装Matlab Add-in所需的Matlab Compiler和C/C++数学库文件到VC目录。 <br>　 4. 启动VC环境，从菜单"Tools -&gt; Customize"选择"Add-ins and Macro Files"选项卡，选中"Matlab Add-in", 点击"Close"。VC工具栏出现Matlab Add-in图标，完成Matlab Add-in的配置，以后每次启动VC将自动加载Matlab Add-in。 <br><br>安装matcom add-in的方法：&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.启动visual c++ ；&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.从菜单&#8220;tool&#8221;中，选择&#8220;customize",选择Add-ins and Macro Files"选项卡；&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.单击browse，在browse for Mocro file or add-in 中将文件类型选为add-ins(dll)，将查找范围转换为c:\Matcom45\bin目录下，选择mvcide.dll.然后打开，&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.close 结束； <br><br>遇到的问题； <br>按照安装步骤安装完matlab add-in之后，我的vc 6.0的add-in and micro 窗口中没有发现matlab add-in的选项。。。。。 <br>matlab addin 和matcom addin 有什么区别，好像没大区别，只是matlab多恶劣打包独立应用程序的功能。 <br><br>推荐一本book： <br>《精通MATLAB 7.0混合编程》 <br>杨高波 编著 <br>电子工业出版<font face=宋体>社 </font><br>
<img src ="http://www.cppblog.com/caribbean/aggbug/77781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/caribbean/" target="_blank">xy</a> 2009-03-24 21:52 <a href="http://www.cppblog.com/caribbean/archive/2009/03/24/77781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>