mingw能在linux上运行么

mingw能在linux上运行。MinGW是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,可以允许用户在GNU/Linux平台上生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。

mingw能在linux上运行么

本教程操作环境:linux7.3系统、mingw-w64、Dell G3电脑。

mingw是什么

MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。

MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。

mingw能在linux上运行么

mingw可以在Linux上运行。以debian系列为例,可以通过如下方法查询到mingw的安装包,根据需要安装即可。

1、查询mingw的运行时库

1.png

2、查询mingw的开发环境

2.png

3、查询mingw构建包

3.png

4、选择适合自己的硬件平台的包进行安装

4.png

Linux下使用MinGW静态交叉编译带有zlib的libcurl

libcurl是一个跨平台的、易用的、强大的网络库。在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为了一个核心部件。但是在Windows平台上却需要手工编译,更不必说一些有特殊洁癖的人(比如说我)还特别讨厌多出来几个DLL,非要静态链接不可。本文作为我两个晚上折腾经历的一个小小总结,讲解如何在Linux下使用MinGW编译给Windows使用的libcurl静态库。

STEP1 安装MinGW编译器

这步我不打算多说,大部分Linux发行版的仓库应该都有,以我的ArchLinux为例,执行:

~# pacman -S mingw-w64

即可。如果你不需要交叉编译,要在Windows上直接编译,请自行去SourceForge上下载Windows版本。不要担心那个w64是不是64位版本,它既可以编译32位又可以编译64位程序。还是以我的版本为例:

一览运营宝 一览运营宝

一览“运营宝”是一款搭载AIGC的视频创作赋能及变现工具,由深耕视频行业18年的一览科技研发推出。

一览运营宝 41 查看详情 一览运营宝

~# pacman -Ql mingw-w64-gcc| grep '/usr/bin/.*gcc$'mingw-w64-gcc /usr/bin/i686-w64-mingw32-gccmingw-w64-gcc /usr/bin/x86_64-w64-mingw32-gcc

可以看到有两个gcc,用i686-w64-mingw32-gcc编译出来的程序就是32位的,而x86_64-w64-mingw32-gcc编译出来的就是64位的。现在,随便写个Hello World(你可以用我的Hello World代码 ^_^),然后编译试试:

i686-w64-mingw32-gcc hello_world.c -o hello_world.exe

把它拿到虚拟机或扔进Wine里,如果能正常运行,那么恭喜你,第一步完成了。

STEP2 下载源码

很简单的步骤,如果自己搞不定的建议直接右上角。

LibCurl:最上面的Source ArchiveszLib:请下Source CodeOpenSSL:可选,如果没有必要就不要编译,会极大地增加文件体积

curl-7.35.0zlib-1.2.8(可能还有openssl-1.0.1f)这几个文件夹放在同一个目录下,然后进行下一步。

STEP3 编译源码

先打开zlib/win32文件夹下的Makefile.gcc文件,把PREFIX =这行改成STEP1里的gcc前缀,对于我来说就是PREFIX = i686-w64-mingw32-。把这个文件拷贝到zlib文件夹下,然后在zlib文件夹下make -f Makefile.gcc,你就应该能看到libz.a这个文件了。

如果你要编译OpenSSL,那么就去openssl文件夹下

$ ./Configure no-shared --cross-compile-prefix=i686-w64-mingw32- mingw$ make

即可,记得改prefix。生成libssl.alibcrypto.a

最后去libcurl里的lib文件夹里修改Makefile.m32文件,在CC = $(CROSSPREFIX)gcc上加一行CROSSPREFIX=i686-w64-mingw32-(请按需修改),然后把下面CFLAGS那行改成这样CFLAGS = -g -O2 -Wall -DCURL_DISABLE_LDAP,最后

make -f Makefile.m32 CFG=-zlib

或是

make -f Makefile.m32 CFG=-zlib-ssl

make到最后时会报个错,是因为文件没放对地方,手动挪一下即可

for x in vtls/openssl.o vtls/gtls.o vtls/vtls.o vtls/nss.o vtls/qssl.o vtls/polarssl.o vtls/polarssl_threadlock.o vtls/axtls.o vtls/cyassl.o vtls/curl_schannel.o vtls/curl_darwinssl.o vtls/gskit.odomv `basename $x` vtlsdone

然后再make一下,libcurl.a文件应该就出现了。
如果生成dll出错也不要紧,我们要的是.a文件

STEP4 测试

现在,你可以找一段libcurl的demo来测试了。注意要加上宏定义CURL_STATICLIB

i686-w64-mingw32-gcc -I. -L. -DCURL_STATICLIB curl_demo.c -lcurl -lz -lws2_32 -o curl_demo.exe

如果你因为不知道gcc-I-L选项的用法而编译不过,请自行Google。如果你加了ssl支持,你需要链接更多的库,具体请根据错误信息自行Google。

最后提醒一点:请把-lcurl选项放在源文件后面,我当初就是因为这个死活链接不过。最后把curl_demo.exe拖进虚拟机里,如果一切正常,那么恭喜你,你成功了。

相关推荐:《Linux视频教程》

以上就是mingw能在linux上运行么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/537976.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
华为全新小折叠nova Flip S首曝:鸿蒙5.0、5000元价位段
上一篇 2025年11月9日 13:39:44
电商带货如何找视频号推广?电商视频带货权限怎么申请?
下一篇 2025年11月9日 13:39:55

相关推荐

  • Linux查看当前目录的命令详解

    Linux查看当前目录的命令详解Linux查看当前目录的命令详解Linux查看当前目录的命令详解Linux查看当前目录的命令详解

    答案是pwd命令用于显示当前工作目录的绝对路径。它在Linux中至关重要,帮助用户明确位置以正确执行文件操作,结合ls、命令提示符等可增强路径感知,使用pwd -P可解析符号链接的真实路径,避免脚本错误,提升操作准确性。 在Linux环境中,要查看当前你所在的目录,最直接且常用的命令就是 pwd 。…

    2026年9月11日 用户投稿
    100
  • 谷歌浏览器如何恢复已删除的书签栏_谷歌浏览器书签栏恢复操作方法

    首先检查书签栏显示设置,点击右上角菜单→书签→勾选“显示书签栏”,或使用快捷键Command+Shift+B(Mac)/Ctrl+Shift+B(Windows);若无效,进入chrome://extensions/排查扩展冲突,逐一禁用并测试;仍异常则重置用户配置文件,退出Chrome后重命名~/…

    2026年9月11日
    100
  • VSCode的终端怎么分屏?

    VSCode终端分屏可通过快捷键或右键菜单实现:使用Ctrl+(Windows/Linux)或Cmd+(Mac)可垂直拆分终端;也可在终端面板右键选择“拆分终端”进行分屏操作。 VSCode 的终端分屏可以通过几种简单方式实现,方便你同时运行多个命令或查看不同目录。 使用快捷键快速分屏 在终端已打开…

    2026年9月11日
    000
  • 如何在Linux中磁盘测速 Linux hdparm性能测试

    hdparm可用于测试Linux系统中SATA/IDE硬盘的顺序读取性能。首先通过sudo hdparm -I /dev/sda确认磁盘信息,再使用sudo hdparm -t /dev/sda测试磁盘顺序读取速度,示例输出为179.40 MB/sec;而sudo hdparm -T可测缓存读取性能…

    2026年9月11日
    200
  • Linux如何查看当前的防火墙策略

    确认防火墙工具类型后,使用sudo iptables -L -n -v查看iptables规则,sudo firewall-cmd –list-all查看firewalld策略,或sudo ufw status查看ufw状态。 Linux系统常用的防火墙工具有iptables、firew…

    2026年9月11日
    500
  • 如何配置mysql数据目录权限

    MySQL数据目录权限需正确配置以确保安全与正常运行。首先通过SELECT @@datadir;确认路径,常见为/var/lib/mysql;使用ls -ld检查属主,若非mysql用户则执行sudo chown -R mysql:mysql /var/lib/mysql修正;推荐权限设为750或7…

    2026年9月11日
    000
  • Linux如何为用户设置环境变量并保持生效

    Linux如何为用户设置环境变量并保持生效Linux如何为用户设置环境变量并保持生效Linux如何为用户设置环境变量并保持生效Linux如何为用户设置环境变量并保持生效

    答案:在Linux中设置持久化环境变量需根据作用范围选择配置文件。用户级别可编辑~/.bashrc(交互式非登录Shell)或~/.profile(登录Shell),系统级别可修改/etc/environment(静态全局变量)、/etc/profile.d/下的脚本(动态变量)或/etc/bash…

    2026年9月11日 用户投稿
    100
  • 我是如何学习Android源码的

    大家好,又见面了,我是你们的老朋友全栈君。 连续很长一段时间(从2017年6月9日到2017年6月26日),我一直在研究蓝牙技术,这还不包括撰写和整理文章的时间。不知不觉中,这段研究已经持续了这么久……我已经写了三篇关于蓝牙的长篇博客,如下所示: 在这里就不放文章链接了,有需要的可以在我的文章中搜索…

    2026年9月11日
    100
  • Linux如何使用curl命令测试接口请求

    curl是Linux下测试HTTP接口的命令行工具,支持多种协议和请求类型。1. 基本语法为curl [选项] [URL],常用选项包括-X指定方法、-H添加请求头、-d发送数据、-i显示响应头、-v调试模式、–data-urlencode进行URL编码。2. GET请求用于获取数据,可…

    2026年9月11日
    000
  • Linux文件系统与目录结构新手入门指南

    Linux文件系统与目录结构新手入门指南Linux文件系统与目录结构新手入门指南Linux文件系统与目录结构新手入门指南Linux文件系统与目录结构新手入门指南

    Linux文件系统以根目录/为起点,采用统一树状结构,所有设备挂载于目录下。常见目录包括/bin、/etc、/home、/var等,各自承担系统命令、配置文件、用户数据、日志存储等功能。通过ls、cd、pwd、df、du等命令可查看和管理目录结构与磁盘使用。路径分绝对(以/开头)和相对,权限由rwx…

    2026年9月11日 用户投稿
    100
  • VSCode怎么做弹窗_VSCode开发Web弹窗与插件交互功能教程

    答案:VSCode插件通过Webview实现弹窗,需创建WebviewPanel并设置HTML内容,利用onDidReceiveMessage和postMessage实现双向通信,结合CSS框架与图标提升美观性,通过Configuration API或文件系统实现数据持久化,并使用开发者工具调试。 …

    2026年9月11日
    000
  • 如何使用VSCode的快速修复(Quick Fix)功能?

    快速修复可自动解决代码问题,如语法错误、未定义变量和缺少导入。将光标置于报错处,通过悬停点击灯泡图标、按下 Ctrl + .(或 Cmd + .)、右键选择“快速修复”来触发。支持多种语言:JavaScript/TypeScript 中自动导入模块,Python 中添加缺失导入或修正拼写,React…

    2026年9月11日
    000
  • Linux分页查看文件命令less与more区别

    less 比 more 更优,因其支持双向滚动、高效处理大文件、提供搜索与实时跟踪功能,且内存占用低,适合现代运维与开发需求。 less 和 more 都是在 Linux 中用于分页查看文本文件的命令,但它们之间存在一个核心区别: less 允许你向前和向后滚动文件内容,而 more 主要只能向前滚…

    2026年9月11日
    000
  • 如何调整VSCode的编辑器布局?

    可通过分割编辑器窗口、调整侧边栏与面板位置、管理标签组及使用布局预设来自定义VSCode工作区。具体包括:右键文件标签拆分或拖拽实现多窗格,使用Ctrl+垂直拆分;移动侧边栏至右侧或调整底部面板位置;拖动标签页管理编辑器组,双击最大化编辑器;启用Zen模式(Ctrl+K Z)或全屏专注编码,结合外观…

    2026年9月11日
    000
  • Linux如何查看进程的CPU和内存占用

    Linux如何查看进程的CPU和内存占用Linux如何查看进程的CPU和内存占用Linux如何查看进程的CPU和内存占用Linux如何查看进程的CPU和内存占用

    要查看Linux进程的CPU和内存占用,最直接的方法是使用top、ps和htop命令。top提供实时动态监控,可按P键以CPU使用率排序,按M键以内存使用率排序,显示各进程的%CPU和%MEM等关键指标;ps用于获取某一时刻的进程快照,常用ps aux或结合grep查找特定进程,如ps aux | …

    2026年9月11日 用户投稿
    100
  • Linux文本搜索命令grep应用实例

    Linux文本搜索命令grep应用实例Linux文本搜索命令grep应用实例Linux文本搜索命令grep应用实例Linux文本搜索命令grep应用实例

    grep是Linux中高效的文本搜索工具,通过正则表达式和多种选项(如-i、-v、-r、-C)实现精准查找,可结合zgrep、find、tail等命令处理压缩日志、递归搜索及实时监控,适用于日志分析、代码审计和配置管理,极大提升信息筛选效率。 grep 命令,在我看来,是 Linux 系统中最被低估…

    2026年9月11日 用户投稿
    000
  • 如何在mysql中升级客户端和服务端版本

    先确认当前MySQL版本并备份数据,再停止服务升级服务端和客户端,最后启动服务并验证功能。具体步骤包括:1. 使用SELECT VERSION()和mysql -V查看版本;2. 用mysqldump备份数据库、配置文件及权限设置;3. 停止MySQL服务并确认进程结束;4. 根据操作系统通过APT…

    2026年9月11日
    100
  • Swoole如何做性能分析?分析工具有哪些?

    Swoole性能分析需结合内置监控与外部工具,先通过SwooleServer::stats()和系统监控定位异常,再用perf、strace或Blackfire等工具深入分析CPU、内存、I/O瓶颈,尤其关注协程阻塞与隐性同步操作,最后通过火焰图可视化热点,迭代优化并验证效果。 Swoole的性能分…

    2026年9月11日
    100
  • Linux如何创建符号链接与硬链接

    软链接用ln -s创建,类似快捷方式,可跨文件系统和指向目录,原文件删除后失效;2. 硬链接用ln创建,共享inode,不可跨文件系统或链接目录,删除一个不影响其他;3. ls -l可区分:软链接显示指向路径,硬链接与原文件属性相同;4. stat命令可查看inode,硬链接与原文件inode一致。…

    2026年9月11日
    200
  • 如何为VSCode设置自定义代码片段?

    设置自定义代码片段可提升VSCode编码效率,需创建JSON格式文件并定义触发词、内容和描述;通过“用户代码片段”选项选择语言或创建全局片段,编辑对应JSON文件添加名称、prefix、body和description;例如输入”log”可生成console.log语句,使用…

    2026年9月11日
    100

发表回复

登录后才能评论
关注微信