关于Linux下ImportError: No module named msvcrt

简介:

msvcrt 是C语言下的库,在Linux下可以用glibc或者libc

具体介绍可以参考:

C运行库和C标准库的关系

    C标准库,顾名思义既然是标准,就是由标准组织制定的。是由“美国国家标准协会(American National Standards Institute,ANSI)”为了规范C语言库而制定的标准。在最初,各个大学各个公司使用的C语言库都不尽相同,造成相互移植非常困难,在这个背景 下,制定了这个标准。

    C运行库,是和平台相关的,即和操作系统相关的。它由不同操作系统不同开发平台提供不同的C运行库。但是C运行库的部分实现是基于C标准库的,即C运行库 是各个操作系统各个开发工具根据自身平台开发的库,某种程度上,可以说C运行库是C标准库的一个扩展库,只是加了很多C标准库所没有的与平台相关的或者不 相关的库接口函数。举例子如:c标准库的strcpy函数负责字符串的拷贝,但是由于缺少对目 地字符串缓冲区大小的控制,极有可能导致缓冲区溢出(大量的缓冲区溢出攻击都是由于这种漏洞而产生的);相反,Windows提供了能够实现同样功能的安 全的字符串拷贝函数,减少了缓冲区攻击的可能,strcpy_s。这些函数是以c运行库的方式提供的,当然,不同的操作系统,c运行时库可能不同,但是对 c标准库的支持是完全一致的,也就是说,在不同的操作系统上,使用同一个c标准库的函数必然产生一致的结果。

  C 标准库函数也称为ANSI C库函数, 在linux 下是用libc表示。  glibc是linux下的GUN C库函数库。(也就是libc的一个扩展)。glibc是由linux下面C标准库的实现,即GNU Clibrary. glibc本身是GUN旗下的c标准库, 后来逐渐成为linux的标准库,而linux下原来的C标准库linux libc逐渐不再被维护。linux下的标准库C不仅有这个如uclibc ,klibc .

但是glibc是被用得最多的

---------------linux 的扩展 glibc 与 glib与libc--------------------

错误观点:glib前面有一个g认为是gnu的东西,同时认为glibc 是glib的一个子集。

其实glib通用性更强。 glib和glibc没有太大关系,可能唯一的共同点是其都是c编程需要调用的库而已。

glib 是 Gtk+ 库和 Gnome 的基础。glib 可以在多个平台下使用,比如 Linux、Unix、Windows 等。glib 为许多标准的、常用的 C 语言结构提供了相应的替代物。

glib是GTK+的基础库,它由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个部分组成,可以在[http://www.gtk.org gtk网站]下载其源代码。是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。GTK+是可移植的,当然glib也是可移植的,你可以在linux下,也可以在windows下使用它。使用gLib2.0(glib的2.0版本)编写的应用程序,在编译时应该在编译命令中加入pkg-config --cflags --libs glib-2.0,如:

gcc  pkg-config --cflags --libs glib-2.0 hello.c -o hello

使用glib最有名的就是GNOME了。

【其他说法】

libc 实际上是一个泛指。凡是符合实现了 C 标准规定的内容,都是一种 libc 。
glibc 是 GNU 组织对 libc 的一种实现。它是 unix/linux 的根基之一。
微软也有自己的 libc 实现,叫 msvcrt 。
嵌入式行业里还常用 uClibc ,是一个迷你版的 libc 。

【总结】

libc, glibc在一个层次,都是C的标准实现库,是操作系统级别的基石之一。

glib是用C写的一些utilities,即C的工具库,和libc/glibc没有关系。

---------------------------

 C标准库中提供的有:

  

  1. <ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;

  2. <errno.h>:定义用来报告错误条件的宏;

  3. <float.h>:包含系统的浮点数大小限制;

  4. <math.h>:包含数学库函数的函数原型;

  5. <stddef.h>:包含执行某些计算 C 所用的常见的函数定义;

  6. <stdio.h>:包含标准输入输出库函数的函数原型,以及他们所用的信息;

  7. <stdlib.h>:包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;

  8. <string.h>:包含字符串处理函数的函数原型;

  9. <time.h>:包含时间和日期操作的函数原型和类型;

  10. <stdarg.h>:包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;

  11. <signal.h>:包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;

  12. <setjmp.h>:包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;

  13. <locale.h>:包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。

  14. 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;

  15. <assert.h>:包含宏和信息,用于进行诊断,帮助程序调试。

上述库函数在其各种支持 C 语言的 IDE 中都是有的。

接下来继续说windows:

   你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C   run-time库,main()就不会被调用,exit()也不能被响应。因为C   run-time   library包含了C程序运行的最基本和最常用的函数。  

如下是C运行库与C标准库的关系:

一个C运行库大致包含了如下功能:

l           启动与退出:包括入口函数及入口函数所依赖的其他函数等。

l           标准函数:由C语言标准规定的C语言标准库所拥有的函数实现。(C标准库

l           I/O:I/O功能的封装和实现,参见上一节中I/O初始化部分。

l           堆:堆的封装和实现,参见上一节中堆初始化部分。

l           语言实现:语言中一些特殊功能的实现。

l           调试:实现调试功能的代码。

CRT的实现是基于Windows API的, 而windows  API的开发是基于C语言(标准库)的,当然还有特有功能的汇编函数。  CRT在windows的表现方式是 msvcrt。

当然并不代表CRT封装了所有的操作系统API ,如一些用户权限控制,操作系统线程创建都不属于CRT(msvcrt) ,这些操作的实现就不得不直接

调用操作系统API。





转载地址:http://m.blog.csdn.net/blog/SauceJ/40649609






      本文转自027ryan  51CTO博客,原文链接:http://blog.51cto.com/ucode/1708869,如需转载请自行联系原作者


相关文章
|
3月前
|
安全 Linux 开发工具
关于如何在Arch Linux上编写自己的第一个module
【8月更文挑战第21天】在Arch Linux上编写首个内核模块需遵循以下步骤:首先,确保已安装Linux内核头文件及开发工具,可通过`pacman -S base-devel linux-headers`安装;其次,理解内核模块基本概念,它是在运行时动态加载以扩展内核功能的代码片段;接着,创建并编辑模块源文件(如`my_module.c`),包含必要头文件,并定义初始化与清理函数;同时指定模块的许可证信息。
|
3月前
|
关系型数据库 MySQL Linux
【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
|
3月前
|
Linux Python
【Deepin 20系统】Linux系统VScode解决Module ‘torch‘ has no ‘cat‘ member
本文提供了解决在Deepin 20系统上使用VScode时遇到的"Module ‘torch’ has no ‘cat’ member"错误的步骤,即通过在VScode的设置中指定正确的pylint路径来解决该问题。
33 0
|
6月前
|
Ubuntu Linux 内存技术
Linux(14)Debain Make image and module configuration instructions
Linux(14)Debain Make image and module configuration instructions
28 0
|
Linux Python
【python】解决 python 项目移动linux上报 No module named 'xxxx' 错误
【python】解决 python 项目移动linux上报 No module named 'xxxx' 错误
283 0
|
Linux Python
Linux上PyCharm报错及解决:ImportError: No module named 'sklearn'
Linux上PyCharm报错及解决:ImportError: No module named 'sklearn'
212 0
|
Ubuntu Linux
关于 QWidget+Qml程序部署到linux时,'module"QtQuick”is not installed' 的解决方法
关于 QWidget+Qml程序部署到linux时,'module"QtQuick”is not installed' 的解决方法
关于 QWidget+Qml程序部署到linux时,'module"QtQuick”is not installed' 的解决方法
|
8天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
69 6