当前位置: 首页 > news >正文

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录

    • 一、安装C、C++编译环境需要的包
      • 1. 选择gcc-core、gcc-g++
      • 2. 选择gdb
      • 3. 选择mingw64下的gcc-core、gcc-g++
      • 4. 选择make
      • 5. 选择cmake
      • 6. 确认更改
      • 7. 查看包安装状态
    • 二、C、C++ 项目编译示例
      • step1:解压缩sed-4.9.tar.gz
      • step2:执行./configure生成Makefile文件
      • step3:执行make命令
      • step4:执行make install命令
      • step5:执行新生成的sed命令

本文将总结基于Cygwin配置C、C++编译环境需要安装哪些包,并给出示例如何进行项目编译。
Cygwin 介绍与安装,请参考:Cygwin 介绍与安装

一、安装C、C++编译环境需要的包

重新运行setup-x86_64.exe程序,步骤与 Cygwin 介绍与安装 基本一致,
重点选择软件包,在选择软件包界面,查看类别

1. 选择gcc-core、gcc-g++

搜索gcc,在Devel分类下,分别找到gcc-coregcc-g++,在新增一栏,点击跳过,在下拉列表选择需要安装的版本;
选择gcc-core、gcc-g++

2. 选择gdb

搜索gdb,在Devel分类下,分别找到gdbe,在新增一栏,点击跳过,在下拉列表选择需要安装的版本;
选择gdb

3. 选择mingw64下的gcc-core、gcc-g++

搜索mingw64,在Devel分类下,分别找到mingw64-i686-gcc-coremingw64-i686-gcc-g++mingw64-x86_64-gcc-coremingw64-x86_64-gcc-g++新增一栏,点击跳过,在下拉列表选择需要安装的版本;
选择mingw64下的gcc-core、gcc-g++
选择x86_64的gcc-core、gcc-g++

4. 选择make

搜索make,在Devel分类下,分别找到make新增一栏,点击跳过,在下拉列表选择需要安装的版本;
选择make

5. 选择cmake

搜索cmake,在Devel分类下,分别找到cmake新增一栏,点击跳过,在下拉列表选择需要安装的版本;
选择cmake

6. 确认更改

然后确认并完成后续安装
确认更改

7. 查看包安装状态

打开Cygwin Terminal,输入下面的命令

cygcheck -c gcc-core gcc-g++ gdb mingw64-i686-gcc-core mingw64-i686-gcc-g++ mingw64-x86_64-gcc-core mingw64-x86_64-gcc-g++ make cmake

包安装验证

二、C、C++ 项目编译示例

这里就不以简单的helloworld为例了。
使用gnu下的sed项目为例
到 https://ftp.gnu.org/gnu/sed/ 下载sed源码
.tar.gz 和 .tar.xz 格式都行

.tar.gz 和 .tar.xz 只是使用的压缩算法不一样,xz 是一种非常高效的压缩算法,压缩比比 gzip 更高。因此.tar.xz 文件比.tar.gz 文件更小,但需要更长时间进行压缩和解压缩;.tar.gz 文件则具备更快的压缩和解压缩速度,但文件大小相对较大。

示例使用:https://ftp.gnu.org/gnu/sed/sed-4.9.tar.gz

说明:Cygwin 安装时,默认是安装了sed命令的,在 Cygwin安装目录的 bin目录下,这里仅是为了演示如何使用Cygwin编译C/C++项目

step1:解压缩sed-4.9.tar.gz

打开Cygwin Terminal,进入到下载的sed-4.9.tar.gz所在的目录,然后执行tar命令解压缩;

$ tar -xzf sed-4.9.tar.gz

解压缩sed源码包

step2:执行./configure生成Makefile文件

$ ./configure

执行configure脚本
生成的Makefile文件

step3:执行make命令

$ make

执行make命令

step4:执行make install命令

执行完make命令后,已经在sed目录下生成了sed.exe命令,继续执行make install命令,将新生成的sed命令,添加到/usr/local/bin路径,这样就可以在Cygwin整个环境中使用这个命令了。

$ make install

make install命令

step5:执行新生成的sed命令

$ sed --version

执行生成的sed命令
注意:

  • 需要重启Cygwin64 Terminal终端,新安装的sed命令才生效;
  • 在执行sed命令时,优先使用 usr\local\bin\sed.exe,而不是bin\sed.exe

另外需要注意的是,Cygwin编译生成的.exe可执行程序,运行时依赖cygwin1.dll等库,为了验证这点,这里将生成的sed.exe程序,复制一份到D:根目录,然后在cmd命令行窗口执行sed --version(注意不是在Cygwin Terminal执行)

在这里插入图片描述
因此,如果想要使Cygwin编译生成的.exe在脱离Cygwin Terminal终端环境也可正常运行,需要系统能找到cygwin1.dll位置,通常的做法是将Cygwin安装目录下的bin目录的绝对路径添加到系统的Path环境变量(因为Cygwin相关的dll都在这个bin目录下)

相关文章:

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录 一、安装C、C编译环境需要的包1. 选择gcc-core、gcc-g2. 选择gdb3. 选择mingw64下的gcc-core、gcc-g4. 选择make5. 选择cmake6. 确认更改7. 查看包安装状态 二、C、C 项目编译示例step1:解压缩sed-4.9.tar.gzstep2:执行./configure生成Makefile…...

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图)效果一览基本介绍程…...

【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互

目录 专栏导读 6 图形绘制与动画效果 6.1 绘制基本图形、文本和图片 6.2 实现动画效果和过渡效果 7 数据可视化 7.1 使用 Matplotlib绘制图表 7.2 使用PyQtGraph绘制图表 7.3 数据的实时刷新和交互操作 7.3.1 数据的实时刷新 7.3.2 交互操作 7.4 自定义数据可视化…...

Java课题笔记~ Ajax

1.1 概述 AJAX (Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。 我们先来说概念中的 JavaScript 和 XML,JavaScript 表明该技术和前端相关;XML 是指以此进行数据交换。 1.1.1 作用 AJAX 作用有以下两方面: 与服…...

调整mysql 最大传输数据 max_allowed_packet=500M

查看 -- show VARIABLES like %max_allowed_packet%; -- set global max_allowed_packet 1024*1024*64;-- show variables like %timeout%; -- show global status like com_kill; show global variables like max_allowed_packet; -- set global max_allowed_packet1024*102…...

【工具】 删除Chrome安装的“创建快捷方式”

创建Chrome的快捷方式,可以放在桌面,想用时双击就可以打开网页,比书签(brookmark)结构化管理更方便。 但是,安装一时爽,卸载有问题。 如果用 windows 控制面板\所有控制面板项\程序和功能 卸载…...

windows上的docker自动化部署到服务器脚本

1、mvn install后,双击这个bat,实现docker build后上传到124服务器,并且重启124服务器 **echo offsetlocal:: 定义镜像名称和版本变量 set IMAGE_NAMEweb set IMAGE_VERSION1.3.1:: 清理本地文件 echo Cleaning up... del service-%IMAGE_N…...

VoxWeekly|The Sandbox 生态周报|20230814

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区&#xf…...

Aurora 8B/10B

目录 1. Overview2. Feature List2. Block Diagram3. Ports Description3.1. User InterfaceFraming InterfaceStreaming InterfaceUser Flow Control(UFC)Native Flow Control(NFC) 3.2. Status and Control Ports3.3. Transceiv…...

如何关闭“若要接收后续google chrome更新,您需使用windows10或更高版本”

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Policies\Google\Chrome] "SuppressUnsupportedOSWarning"dword:00000001 如何关闭“若要接收后续 google chrome 更新,您需使用 windows 10 或更高版本” - 知乎...

python中使用xml快速创建Caption和URL书签管理器应用程序

导语: 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一…...

分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测

分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测 目录 分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分…...

Vue中使用v-bind:class动态绑定多个类名

Vue.js是一个流行的前端框架,它可以帮助开发者构建动态交互的UI界面。在Vue.js开发中,经常需要动态绑定HTML元素的class(类名)属性,以改变元素的外观和行为。本文将介绍采用v-bind:class指令在Vue中如何动态绑定多个类…...

深入了解Maven(一)

目录 一.Maven介绍与功能 二.依赖管理 1.依赖的配置 2.依赖的传递性 3.排除依赖 4.依赖的作用范围 5.依赖的生命周期 一.Maven介绍与功能 maven是一个项目管理和构建工具,是基于对象模型POM实现。 Maven的作用: 便捷的依赖管理:使用…...

PostgreSQL中的密码验证方法

假设您想在客户端/服务器协议中实现密码身份验证方法。 您将如何做到这一点以及可能出现的问题是什么? 以下是 PostgreSQL 中如何完成此操作的故事。 password 一开始,PostgreSQL 只有 pg_hba.conf 中现在称为“password”的方法。 这是你能想象到的最…...

【微信小程序】小程序之间的跳转方式总结

想要从该小程序跳转到其他小程序怎么做? 方式 小程序之间的跳转方法有: wx.navigateTo:保留当前页面,跳转到应用内的某个页面,然后从该页面返回上一页的时候使用wx.navigateBack返回。wx.switchTab:跳转…...

基于Mysqlrouter+MHA+keepalived实现高可用半同步 MySQL Cluster项目

目录 项目名称: 基于Mysqlrouter MHA keepalived实现半同步主从复制MySQL Cluster MySQL Cluster: 项目架构图: 项目环境: 项目环境安装包: 项目描述: 项目IP地址规划: 项目步骤: 一…...

Android12.0 系统限制上网系列之iptables用IOemNetd实现清除所有规则的实现

1.前言 在12.0的系统rom定制化开发中,对于系统限制网络的使用,需要在system中netd网络这块的产品要求中,会要求设置屏蔽ip地址之内的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现清除所有自定义规则的的相关功能 2. 系统限制上网系列之iptab…...

vue2和vue3响应式原理

Object.DefineProperty配置对象的主要属性有: value:20 //添加的属性的value enumerable:true //是否可以被枚举获取到 默认:false writeable:true //value是否可以被修改 默认:false configurable:true //是否可以被删除 默认:f…...

【面试八股文】每日一题:谈谈你对线程的理解

每日一题-Java核心-谈谈你对线程的理解【面试八股文】 Java线程是Java程序中的执行单元。一个Java程序可以同时运行多个线程,每个线程可以独立执行不同的任务。线程的执行是并发的,即多个线程可以同时执行。 1. 线程的特点 Java中的线程有如下的特点 轻…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...