MinGW和 MinGW-W64的区别

2023-11-06

部分参照备忘录原文:

bitbucket.org/FrankHB/yslib/src/50c3e6344a5a24b2382ce3398065f2197c2bd57e/doc/Workflow.Annual2014.txt?at=master 452行。

试试问答体。首先得绕个远路,从Win32开始说起,否则之后容易乱……

Q:什么是Win32?

A:嘛,32自然是指32位了?不一定。

正式地说,Win32主要是指跑在Windows NT

Microsoft Windows NT(New Technology)是Microsoft在1993年推出的面向工作站、网络服务器和大型计算机的网络操作系统,也可做PC操作系统。它与通信服务紧密集成,基于OS/2NT基础编制。OS/2由微软和IBM联合研制,分为微软的Microsoft OS/2 NT与IBM的IBM OS/2。协作后来不欢而散,IBM继续向市场提供先前的OS/2版本,微软则把自己的OS/2 NT的名称改为Windows NT,即第一代的Windows NT 3.1微软公司从数字设备公司(Digital Equipment Corporation)雇佣了一批人员来开发这个新系统。“NT”所指的便是“新技术”(New Technology)之意。“NT”除了可以解释为“新技术”之外,有另一个版本指“NT”是来自微软在i860上开发NT时所使用的模拟器“N10”(N-Ten),windows7为NT6.0版本)

内核上的Win32子系统。现在x64的Windows上的大部分程序也是跑在这个子系统上的,system32目录也没叫成system64。尽管32的语源的确来自于“32位”。

Q:那么为什么还有Win64?

这倒可以肯定,这里的64是指64位目标平台,因为没有上面的那种歧义。

有一点值得注意,在MSVC

(MSVC,就是微软(MS)的VC运行库。VC运行库,是Visual C++的运行库。很多程序在编制的时候,使用了微软的运行库,大大减少了软件的编码量,却提高了兼容性。但运行的时候,需要这些运行库。这些运行库简称就是MSVC。

        运行库的版本很多,一般都要装,比如2003、2005、2010等,另外还有32位和64位的区别,装起来比较麻烦。建议下载IT天空一键驱动里的VC运行库,一键即可安装完毕)

中,32位环境(当然是说跑的Intel 兼容CPU的PC)预定义宏_WIN32,但64位环境同时预定义了_WIN32和_WIN64。

顺便,通常64位主要指x86_64(微软称为AMD64,这个兼容x86的基础架构一开始的确是AMD先搞出来的,后来才有Intel EM64T)。

64位Itanium也有_WIN64,不过一般见不到且跟MinGW没什么关系且现在都不正式支持了,不管了……

对于MinGW来说,这里也有类似的坑:预定义宏得先优先检查64位的。实际情况更加复杂,另说。

Q:MinGW和MinGW-W64有什么区别?

这个是个关键问题,但是……是个很长的故事。没有铺垫不好回答。

首先,MinGW是GNU工具(包括编译器GCC和GNU binutils

(GNU binutils是一组二进制工具集。包括:addr2line argprofnm objcopy objdump ranlib size strings strip. 本文归纳他们的常用法。ar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检索并得到原始的被包含文件(称之为archive中的member)。member的原始文件内容、模式(权限)、时间戳、所有者和组等属性都被保存在 archive中。member被提取后,他们的属性被恢复到初始状态。)

和调试器GDB等)在Win32上的一个移植,是从Cygwin里fork出来的。当初只考虑32位。和Cygwin相比,不强调POSIX兼容性而相对强调性能和减小依赖。

具体来说MinGW除了以上工具外,还提供了一个适配于Win32的运行时环境。其中C标准库实现用的直接是微软随Windows分发的MSVCRT

(msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。)。

MinGW自己的运行时库依赖于MSVCRT和其它系统库。

而MinGW GCC依赖于MinGW运行时以及libgcc和其它系统库。编译出来的程序一般也要依赖这些库,所以才会写死在默认specs里(可以用gcc -dumpspecs查看)免得用户随便编译链接个程序还得手动指定一大堆-l选项。

用三元组表示目标平台,当年的MinGW是指i386-pc-mingw32。这里i386也可以是i486等等……总之是32位x86指令集架构的名称。中间的pc可选,表示厂商名。mingw32表示系统名。

特别注意,事实上成为标准的“专有名词”mingw32里的32是固定的。另外,所有这些大小写一般也是固定的。GCC等的源码配置里面也有硬编码进去。

然后,因为只支持32位,有人觉得不够用。这里的一个主要人物,就是现在MinGW-W64的主要维护者Kai Tietz。因为工作需要他想MinGW提供扩充x64支持,但对方态度很不友好。于是愤而fork出来,这就是MinGW-W64的由来。

可见,MinGW-W64和原版MinGW有所渊源,但是独立的两个项目。

W64虽然用意是Win64,但是也算是个专有名词,在三元组里占据厂商名,例如常见的:i686-w64-mingw32。(在GCC源码的配置文件中,*-w64-mingw32和*-pc-mingw32是分别对待的。)

MinGW-W64是同时支持32位和64位的。甚至还支持32位和64位的交叉编译(启用multilib支持的MinGW发行版例如mingw-builds可以用-m32或-m64指定)。

显然,W64和支持的架构无关。上面i686就不是64位的平台(而且可以看出这里的32也和架构没关系)。支持64为的对应三元组是x86_64-w64-mingw32。

……容易让人头疼的是,这两个项目现在都没死,偏偏还很容易因为这些字面上的原因搞错。为了下文描述方便,原版MinGW称为MinGW.org。

这里有一点非常重要:只有MinGW-W64是GCC官方支持的(尽管mingw32平台是二等公民)。Kai Tietz拥有GCC官方repo的提交权限。

所以,使用MinGW-W64的GCC一般比MinGW.org有更新更全面的支持,所以现在一般推荐MinGW-W64发行版。

说到这里……维护mingw.org的Keith Marshall还和Kai Tietz等GCC官方人员在bugzilla上对噗过:gcc.gnu.org/bugzilla/show_bug.cgi?id=52015。

其中Keith Marshall对MinGW-W64使用MinGW一名造成混淆表示愤慨。嘛,这倒也是事实。

当然,也不是说MinGW.org就一无是处了。*-w64-mingw32原则上向后兼容*-pc-mingw32,不过也有一些接口上的差别。BSD流的DT_*在MinGW.org上能用,在MinGW-W64的就没有。(虽然DT_*也不怎么推荐用就是了……)

Q:什么是MinGW发行版(distribution) ?

这个说法习惯上可以说是从Linux等软件中借用过来的。

类似Linux内核,不管MinGW.org还是MinGW-W64,本身都是相对集中于特定软件包(MinGW运行时库)开发的项目,并不着力于提供整个开箱即用的环境。

因此除了官方的一些编译版本外,有很多人基于MinGW运行时上进行定制封装供用户下载整个环境,有的还提供包管理服务等。这就是发行版。一般提供直接解压加上PATH就能用的环境和/或安装包。

早期比较著名的有TDM-GCC、rubenvb等。

以前用的MinGW.org,不过现在主要转到MinGW-W64上来了。

比较新的发行版,一开始就着眼于MinGW-W64。最著名的发行版之一应该是mingw-builds,基本上近年来(GCC4.7以后)Windows上能用支持最新版本最快的,支持交叉编译。

mingw-builds一开始在sf.net上有自己的项目,不过后来表示要求加入MinGW-W64项目作为official builds,所以停更了,更新都在MinGW-W64里面,不过残念的是好像到现在MinGW-W64看来都不提供唯一的官方发行版,所以还是叫做personal builds。

另外提一下还有微软VC++标准库Dinkumware维护者之一Mr.STL(Stephan T. Lavavej) 个人的发行版,默认specs里加了-std=c++11。

还有MSYS2项目的MinGW发行版(这里可能有新的混乱,下文再说),也是mingw-builds一伙人搞的,最近(4.9.1)比mingw-builds更新还快几个小时。

其它发行版可以参照mingw-w64.sourceforge.net,更新相对没那么快。

最后,不嫌闲着蛋疼也可以自己编译。不过迫不得已外最好别这样做(GCC的编译过程和hacking实在无力吐槽)。重复一遍,非常不推荐。

Q:上面为什么要强调更新呢?

如果不想使用新的特性生成更高质量的代码,其实也没必要盯着上面这么多版本混乱的MinGW了。即便要兼容性,也可以用古董嘛(逃……

对于C++前端来说MinGW尤为重要,现阶段根本没有能顶替的。作为系统默认ABI新锐代表的MSVC2013——前端还是残的……各种bug。

GCC也有各种傻缺bug,不过至少在前端来说,程度上绝逼打不过cl(Microsoft C&C++ Optimizing Compiler)。

VC++调试支持当然好得多,但是编译器一坑爹集成调试再好也没用了。

嘛,Clang++?libc++什么时候能在Windows上跑顺再说——即便这样MinGW兼容的还是得依赖MinGW的libgcc。至于和VC++兼容的clang-cl,看起来还在折腾微软的坑爹ABI黑箱(这没像大部分平台上GCC用的Itanium ABI公开文档),一年半载别指望了。

Q:什么是异常模型和线程模型,用哪种比较好?

这两个都是对于C++实现(G++、libgcc、libsup++等等)而言的。

首先,异常模型。C++标准没规定异常怎么实现。MinGW GCC使用的Itanium ABI也没规定必须怎么实现(但规定了一些公共接口),这部分由实现自行考虑。

GCC一般提供了SjLj(C的setjmp/longjmp)实现的stub。对于x86,允许使用Dwarf2调试信息的实现。两者的区别在于sjlj比较通用,但是即便不抛出捕获异常而只是使用异常中立的风格隐式传递异常,也有运行时开销。而Dwarf2兼容性(考虑多层C++和C的DLL互相调用来看)相对较差,但没有这种开销。

两者ABI并不兼容(知道C++坑爹了吧,不仅不同实现不兼容,同一个编译器同一个平台自己都能跟自己不兼容……)——前者依赖类似libgcc_s_sjlj.dll这样的dll,后者则是类似libgcc_s_dw2.dll这样的。旧一点的可能也没有这种后缀差异。

另外,libstdc++作为C++标准库实现显然依赖异常,但名字一样的dll可能依赖的不是同一种。所以混用多个版本MinGW GCC且没把path清理干净的时候容易出现找不到符号定义导致链接失败。这还不是最坑的,有时候gdb载入不同位置的dll在运行时挂掉,还不只是一个PATH的问题……这种情况下先拿system internals的process exporler之类的工具看看进程加载的DLL是不是预期的再说。

为什么说要有这么坑爹不兼容的,像VC++一样用一种不就好了……其实Win32 x86上最理想的应该是和VC++一样基于SEH(Windows结构化异常处理)的实现,但是Borland关于这个的专利才没过期几天……所以你懂的。

x64上没专利的麻烦,有sjlj和SEH的实现,一般还是SEH。

第二,线程模型。

Windows线程API和POSIX(pthread) 有很大不同,而ISO C++的std::thread为代表的接口是很接近pthread的。

所以在libstdc++上实现这些接口,首先依赖的是pthread在Win32上的移植libwinpthread,也就是POSIX线程模型。因此发布的时候需要带上libwinpthread-1.dll之类的dll。

至于Win32线程模型,GCC mailing list是有提过,不过到现在还是没实现。也就是说ISO C++的实现是残的,没法用。如果只打算用Win32多线程API倒是的可以用。

所以取决于具体需要。要兼容性好点的一般还是POSIX。

Q:什么是MSYS,和MinGW有什么区别?

MSYS是提供一套“系统”,三元组是*-pc-msys。

和MinGW相比,MSYS更接近Cygwin(强调POSIX兼容性),提供了一个sysroot(下面有/bin啊/etc什么的),因此移植POSIX环境的程序一般更方便。

代价也是有的。MSYS环境下原生编译的程序一般需要多依赖MSYS运行时库(当然比Cygwin要轻量多了)。

所以常规的实践是,如果只是开发Windows程序,能用MinGW就不要用MSYS原生的编译器来构建。当然,使用MSYS上的sh等工具还是没问题,跟GNU工具配套怎么说比cmd总好用。(虽然也有不少琐碎坑爹bug。)

Q:什么是MSYS2,MSYS2上的MinGW发行版是怎么回事?

字面意思,MSYS 2.0。比起1.0来说更加像Cygwin(例如/etc/fstab配置)。项目在sf.net上托管。

一个特色是基础系统附带ArchLinux移植的包管理器pacman,可以同时独立部署/mingw32(i686-w64-mingw32)和/mingw64(x86-w64-mingw32)下的开发和运行环境。

下载依赖相当方便(就是没有靠谱的镜像,网速可能非常拙计)。具体使用参考ArchLinux Wiki。

虽然不支持交叉编译,不过可以分别装所以不是什么问题,比mingw-builds的-m32和-m64来说更加稳定靠谱。

只提供Dwarf2异常模型和POSIX线程模型对于成套系统也不是什么大问题。包虽然比不上ArchLinux那么丰富不过常用的很多都有,免去自己编译的麻烦。打算长期使用MinGW和相关工具的,推荐使用。

虽然滚挂了也没多大事,不过版本是个问题。如果需要特定版本的GCC就不适用(比如规避GCC 4.9的坑爹bug……),除非有耐心自己找到.xz手动安装。

Q:部署程序需要提供哪些文件?

Windows默认安装自然不带MinGW运行时环境,所以除了编译出来的程序和可能附带的数据,一些dll是要准备好的——除非有耐心折腾全部静态链接。

不同版本不同语言不同编译器编译出来的东西都不太一样。最简单暴力也可靠(?)的方法就是复制可执行程序到没装环境的白板测试机上看少了哪些东西(不过未必一目了然)。

简单可靠的方式是用Dependency Walker等工具查看依赖。

对于C++,除非不用POSIX thread可以省掉libwinpthread,一般至少得确保上面异常模型和线程模型讨论中提到的三个dll(注意就算你不显示使用标准库,编译器生成的代码也可能用到——典型的如默认::operator new,所以得带上libstdc++)。

Q:现在还有什么新坑?

就提一个GCC 4.9的问题。

GCC 4.9的LTO(链接时优化)默认使用新的目标文件格式,生成的文件不包含冗余的二进制代码。

但是LTO有特定的phase(内部会多编译几个pass),传统的静态链接器(ar) 不知道这里的约定,所以原来好好的东西,升级4.9以后开了-flto就可能找不到符号链接失败。

现在MinGW发行版应该都没实现gcc-ar(运行会提示没支持linker plugin)。兼容旧版本的行为还得加上-ffat-lto-objects编译选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MinGW和 MinGW-W64的区别 的相关文章

  • 如何使用 Python 2.6 在 Windows 上安装 PyGTK / PyGobject?

    我有一个依赖于 PyGTK PyGobject 和 PyCairo 的应用程序 我为在 Linux 上运行而构建了该应用程序 我想将它移植到Windows 但是当我执行时import gobject我明白了 Traceback most r
  • MinGW:使用 __declspec(dllexport) 还是 __attribute__((visibility("default")))?

    MinGW支持吗 declspec dllexport declspec dllimport 即使是这样 我应该使用 attribute visibility default 基本上我应该根据平台或编译器来决定使用什么 应该是这样吗 ifd
  • 构建 Windows 版 Linphone 时出错

    我正在尝试按照以下说明构建适用于 Windows 的 linphoneReadme mingw使用 MinGw Msys 在下载belle sip包之前没有任何问题 当我跑步时 autogen sh我收到以下错误 Generating bu
  • printf 中的否定

    我有下面的代码 我不确定为什么 printf 内部的否定与外部的否定不同 char d 0x04 printf Value of d X n d d d printf Value of d X n d 打印的结果是FFFFFFFB和FB 这
  • 如何更新到 mingw-gcc 4.8.2?

    我想在 c 11 中使用正则表达式 gcc 4 8 2 支持它 但 MinGW 安装程序最高仅支持 gcc 4 8 1 如何将其更新到 gcc 4 8 2 您可以自己手动安装 有一个 MinGW w64 发行版4 8 2 可在此处获取 ht
  • libCurl 和 OpenSSL 的奇怪之处

    又是我 我就是不明白 为什么会这样 我下载了 OpenSSL 的编译静态库 从这里 http www shininglightpro com download Win32OpenSSL 1 0 0d exe 此链接位于 cUrl 官方网站的
  • 如何解决 mingw32-make.exe 退出并出现代码 2 错误?

    我已经安装了Qt Open source 4 8 3适用于 Windows 的库Windows 8 Pro x64 Qt Creator 2 6 0 and MingW 4 4 0手动 我从 Qt Creator 设置了套件和编译器 我打开
  • vcpkg 与 MinGW?

    我喜欢 vcpkg 的想法 但我想我更愿意坚持使用 MinGW 作为我的编译器 我找不到任何关于是否可以设置 或如何设置 vcpkg 以便它为 MinGW 而不是 MSVC 编译包的资源 如果可能的话 有人能给我指出正确的方向吗 有一些关于
  • 如何使用 MinGW 运行 ./configure?

    我正在看这个网页 http mathieu carbou free fr wiki index php title Glib for Win32 http mathieu carbou free fr wiki index php titl
  • 支持 MingW32 的免费分析器好吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在另一个帖子中问 如何分析我的东西 人们给了我很多很好的回复 除了当我尝试使用几个免费的分析器 例如
  • 在 Linux for Windows 上编译 C++ 代码时出错

    我正在尝试使用以下命令在 Linux 主机上编译适用于 Windows 的 C 应用程序 i686 w64 mingw32 g o app exe app cpp 但代码中导入了特定的 Windows 库 import mscorlib t
  • Qt Creator错误代码-1073741819

    好的 Qt Creator 和我尝试在 项目 gt 应用程序 gt Qt Gui 应用程序 下创建最基本的应用程序 项目创建成功 此外 当我编译它时 它似乎工作得很好 11 07 38 Running steps for project T
  • CMake 无法静态链接 SDL2

    我正在尝试使用 CMake 和 MSYS Makefile 构建一个简单的 SDL2 游戏 我想静态链接 SDL2 这样我就可以分发单个可执行文件 而不必包含 SDL2 dll 这是我的CMakeLists txt file project
  • libtool:i686-pc-mingw32 共享中不允许未定义的符号

    我正在使用自动工具作为我的库的构建系统 最近库被移植到Windows 尽管我遇到了一个奇怪的错误 但库编译和链接成功 配置和make后只有静态库 除了警告之外 一切看起来都很好libtool libtool undefined symbol
  • 无法使用 MinGW C++ 在 NetBeans IDE 7.3 中编译“Hello World”

    我正在尝试制作一个简单的 Hello World 在 NetBeans IDE 7 3 中使用 MinGW 作为我的 C 编译器来编写程序 我遇到了构建失败的情况 但我不知道为什么 这是我的编译器设置 Family MinGW 基本目录 C
  • 以编程方式或使用清单 (MinGW) 将“覆盖高 DPI 缩放”设置为“系统(增强)”

    我尝试了所有可能的组合gdiScaling and dpiAware 仍然没有运气 如果我手动右键单击 app exe 并将 覆盖高 DPI 缩放 设置为 系统 增强 效果很好
  • mingw32-make 的目录更改错误

    我正在MinGW32下构建POCO库1 6 0 环境 Windows 7 Ultimate 32位 shell MSYS 执行成功 配置 configure Configured for MinGW config make的内容 POCO
  • 关闭时不会调用 SetConsoleCtrlHandler

    我编写了一个在控制台中运行的应用程序 需要在系统关闭或用户注销之前进行快速备份 我的测试应用程序编写一个带有信号的文件 并在手动关闭控制台窗口 单击 X 时工作 但当控制台在关机或注销时关闭时 它不起作用 从我在 MSDN 上读到的内容来看
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 使用 MinGW 链接到 Python

    我不想创建一个嵌入Python解释器的跨平台程序 并用MinGW编译它 但是 Python 二进制发行版没有提供 MinGW 链接的库 仅python32 lib对于 Visual C 并且 Python 源包不提供使用 MinGW 编译的

随机推荐

  • shell脚本——循环语句、sed、函数、数组、免交互expect

    目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数 数组 声明数组 数组切片 免
  • 记录 BL-604 环境配置

    与两个朋友组队参加个比赛 第一次正经的参加比赛 弥补之前一些遗憾吧 随便记录一下 下载博流的开发包 https gitee com bouffalolab bl mcu sdk 注册平头哥 https occ t head cn auth
  • NandFlash介绍、操作流程分析以及S5PV210的NandFlash控制器介绍

    1 NandFlash的型号与命名 注 本文以S5PV210芯片和K9F2G08芯片做分析 1 Nand的型号命名都有含义 拿K9F2G08来示例分析一下 K9F表示是三星公司的NandFlash系列 2G表示Nand的大小是2Gbit 2
  • Tomcat 各安装包选择及使用情景。

    本文参考 Apache Tomcat 8 5 51 官方 README 文件 当我们进入 Tomcat 主页下载 Tomcat 时 会看到各种安装包的选择 Binary Distributions 二进制发行包 Core zip pgp s
  • QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

    QT C 多线程时 工作界面的样式频繁改变导致程序奔溃的问题 一 错误现象与原因 最近在学习QT 遇到了一点问题 是关于工作线程与UI线程的 其主要问题为 我的工作线程是一个死循环 当我点击按钮进入工作线程 我的工作线程用emit发送一个信
  • IDEA使用JUnit时@Test无效以及无法导入org.junit包的一系列问题

    先找到idea的安装位置 进入lib文件夹 然后打开idea File gt Project Structure 选择Project Settings中的Libraries 点击如图 号 然后添加以下两个包 点击OK 添加成功就可以了 ht
  • 3.java 基础if语句测评题-答案

    知识点 java 基础if语句测评题 答案 题目1 训练 李雷想买一个价值7988元的新手机 她的旧手机在二手市场能卖1500元 而手机专卖店推出以旧换新的优惠 把她的旧手机交给店家 新手机就能够打8折优惠 为了更省钱 李雷要不要以旧换新
  • SQL-更新和删除数据

    如何使用UPDATE和DELETE语句进一步操作表数据 1 更新数据 更新 修改 表中的数据 使用UPDATE语句 更新表中的特定行 更新表中的所有行 注 不要省略WHERE子句 在使用UPDATE时一定要细心 因为稍微不注意 就会更新表中
  • ArcGIS教程:面积制表

    摘要 计算两个数据集之间交叉制表的区域并输出表 插图 使用方法 区域定义为输入中具有同样值的全部区 各区无需相连 栅格和要素数据集都可用于区域输入 假设区域输入和类输入均为具有同样分辨率的栅格 则可直接使用它们 假设分辨率不同 则可先应用内
  • AT指令(中文详解版)

    AT命令最常见的应用场景 1 智能手机 一般智能手机都是一个主芯片控制一个通信模块 这个通信模块就是一个完整的 简单的手机 包括手机应该有的射频 基带等部分 还有GSM协议栈 完全可以独立打电话 发短信 用GPRS上网等 主芯片实现复杂的应
  • 【GD32篇】新建KEIL工程

    以GD32f103C8T6芯片为例 一 下载MDK5 软件包 下载地址 https www keil com dd2 pack 1 选择工程所需的软件包 2 打开软件包 安装在KEIL5同路径下 3 安装成功后打开keil软件 可查看到自己
  • 经典Hive-SQL面试题及答案

    目录 第一题 求分区累加值 第二题 UV和每个店铺访问量top3信息 Hive sql解答 第一题 求分区累加值 我们有如下的用户访问数据 userId visitDate visitCount u01 2017 1 21 5 u02 20
  • 单片机C语言基础知识-指针篇

    引言 指针是变量在计算机或单片机内所占有的存储区域的地址 C51语言中广泛使用的指针概念是从C语言中继承下来的 利用指针变量不但可以操作各种基本的数据类型 而且能使C51语言像汇编语言一样 具有处理单片机内存地址的能力 地址 指针 指针变量
  • Paramiko远程操作Linux服务器

    在日常工作中我们经常会跟Linux打交道 对于测试同学来说 使用Linux的场景还是比较多的 比如 搭建测试环境 查看日志信息 修改配置文件 监控服务资源等 本篇将介绍一个Python的第三方库Paramiko 使用Paramiko 我们可
  • ChatGPT学python——制作自己的AI模型(一)初步了解

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 引
  • 离线环境下手动安装python环境的依赖包

    在写完python代码之后 想要部署到服务器上 但由于服务器无法连接外网 对应的服务器上也没有代码中用到的包 怎么进行手动安装 正是一件麻烦的事情 现在主要针对这样的情况介绍几种依赖包的手动安装 这里主要介绍flask和jieba的安装 关
  • opencv获取多个摄像头名字和编号

    https blog csdn net hyqwmxsh article details 74479694
  • 房地产不同视角

    author skate time 2012 08 14 房地产不同视角 房地产 你为啥看不懂 一 看现象与看本质 http blog sina com cn s blog 77479d2301015cpk html 房地产 你为啥看不懂
  • KMP例题

    KMP算法 实现两个字符串的匹配 KMP讲解 KMP模板 include
  • MinGW和 MinGW-W64的区别

    部分参照备忘录原文 bitbucket org FrankHB yslib src 50c3e6344a5a24b2382ce3398065f2197c2bd57e doc Workflow Annual2014 txt at master