mingW與cygwin 異同

首先MingW和cygwin都可以用來跨平臺開發。??
MinGW是Minimalistic?GNU?for?Windows的縮寫,也就是Win版的GCC。??
Cygwin則是全面模擬了Linux的接口,提供給運行在它上面的的程序使用,并提供了大量現成的軟件,更像是一個平臺。??
相對的MingW也有一個叫MSys(Minimal?SYStem)的子項目,主要是提供了一個模擬Linux的Shell和一些基本的Linux工具。因為編譯一個大型程序,光靠一個GCC是不夠的,還需要有Autoconf等工具來配置項目,所以一般在Windows下編譯ffmpeg等Linux下的大型項目都是通過Msys來完成的,當然Msys只是一個輔助環境,根本的工作還是MingW來做的。?

用MingW和cygwin編譯出來的程序的區別。??
首先MingW和cygwin都不能讓Linux下的程序直接運行在Windows上,必需通過源代碼重新編譯。??
現代操作系統包括Windows和Linux的基本設計概念像進程線程地址空間虛擬內存這些都是大同小異的,之所以二者上的程序不能兼容,主要是它們對這些功能具體實現上的差異,首先是可執行文件的格式,Window使用PE的格式,并且要求以.EXE為后綴名。Linux則使用Elf。其次操作系統的API也不一樣,如Windows用CreateProcess()創建進程,而Linux使用fork()。??
所以要移植程序必然要在這些地方進行改變,MingW有專門的W32api頭文件,來把代碼中Linux方式的系統調用替換為對應的Windows方式。而Cygwin則通過cygwin1.dll這個文件來實現這種API的轉換,并模擬一個Linux系統調用接口給程序,程序依然以Linux的方式調用系統API,只不過這個API在cygwin1.dll上,cygwin1.dll再調用Windows對應的實現,來把結果返回給程序。??
可以用查看他們編譯好的程序的導入表來驗證這點。??
二者生成的程序都是能在Windows上運行的EXE文件,顯然都是PE格式,用一個PE格式查看工具檢查一下就能發現,Cygwin生成的程序依然有fork()這樣的Linux系統調用,但目標庫是cygwin1。而MingW生成的程序,則全部使用從KERNEL32導出的標準Windows系統API。??
這樣看來用Mingw編譯的程序性能會高一點,而且也不用帶著那個接近兩兆的cygwin1.dll文件。??
但Cygwin對Linux的模擬比較完整,甚至有一個Cygwin?X的項目,可以直接用Cygwin跑X。??
另外Cygwin可以設置-mno-cygwin的flag,來使用Mingw編譯。??
而與Cygwin更有可比性的MSys上的工具也是通過Cygwin這種模擬的方式來提供的。??
總之這兩個項目有千絲萬縷的關系,一個不恰當的比方,如果Mingw是MFC,Cygwin就是.NET了。

?

=====================

1.修改編譯器,讓window下的編譯器把諸如fork的調用翻譯成等價的形式--這就是mingw的做法.?
2.修改庫,讓window提供一個類似unix提供的庫,他們對程序的接口如同unix一樣,而這些庫,當然是由win32的API實現的--這就是cygwin的做法.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell字符串的用法

shell字符串的用法 注意:shell4.2和shell4.1會有差別,較低版本的shell可能不支持某些功能 獲取字符串長度:${#string}獲取子串: 注:(左邊的第一個字符是用 0 表示,右邊的第一個字符用 0-1 表示&…

backtrader期權回測框架

使用backtrader數據進行回測,數據源來自于交易所爬取。 效果還行,我相信各位通過這個的框架學習,會對backtrader的應用有更深的領悟。包括數據的連接,新指標的加入。 導入框架: __future__ import (absolute_import…

kong入門實戰

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 安裝kong-database docker run -d --name kong-database \-p 5432:5432 \-e "POSTGRES_USERkong" \-e "POSTGRES_DBkong&…

PAT A1048

示例思想中提到了二分以及two point概念,這個需要后面進行總結;這個示例也給出了一個新的思路。對于兩個數字和m,查找兩個加數,可以進行i和m-i的枚舉,通過遍歷數組查看兩個加數是否存在,來進行遍歷&#xf…

linux 32位平臺,文件大小受限于2G的解決方法

公司的asterisk系統已經發生了兩次crash,檢查日志,都是在日志文件寫滿到2G后自動執行轉儲時,日志還在寫繼續寫入而導致的。google以后,發現了下面這邊文章,贊!解決了文件大小限于2G的問題,轉帖到…

【noip模擬賽4】Matrix67的派對 暴力dfs

【noip模擬賽4】Matrix67的派對描述 Matrix67發現身高接近的人似乎更合得來。Matrix67舉辦的派對共有N(1<N<10)個人參加&#xff0c;Matrix67需要把他們安排在圓桌上。Matrix67的安排原則是&#xff0c;圓桌上任意兩個相鄰人的身高之差不能超過K。請告訴Matrix67他共有多…

Backtrader多周期回測

獲取數據 result pd.read_csv(11.csv) df pd.DataFrame(dataresult) df df.set_index([datetime]) df 策略 class MultiTFStrategy(bt.Strategy):params ((period, 20),)# states definationEmpty, M15Hold, H1Hold, D1Hold range(4)States [Empty, M15Hold, H1Hold, D…

CentOS 7 防火墻操作

導語 今天說下防火墻的操作。CentOS 6 的防火墻是 iptables&#xff0c;CentOS 7 默認的是 firewall&#xff0c;以前的操作不再適用。 查看、開啟 服務器剛剛重啟完畢&#xff0c;先來看下防火墻的狀態&#xff0c;輸入 systemctl status firewalld 進行查看 這里是關閉的&…

Centos安裝nmon軟件 ( 測試 )

安裝 mkdir /usr/local/nmon cd /usr/local/nmon wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz tar zxvf nmon_linux_14i.tar.gz chmod 777 nmon_x86_64_sles11 12345 啟動 ./nmon_x86_64_sles11 1 說明&#xff1a; 按C顯示CPU信息&#xff0c;再按…

阿里云安裝Quantaxis

參考博客&#xff1a;https://github.com/QUANTAXIS/QUANTAXIS/issues/1395 之后進入阿里云中的Ubuntu界面 輸入&#xff1a; sudo yum install apt-transport-https ca-certificates curl software-properties-common Sudo yum install curl service network restartcd qua…

sorted_一個函數秒殺冒泡排序算法和選擇排序

sorted一招殺a [3,9,12,4,5,7,8,110]print(sorted(a,reverseTrue))# true為降序print(sorted(a,reverseFalse))# revers false為升序print(sorted(a))#默認是false升序排列Bubble_sort下面看看坑死人無數的冒泡排序內循環和外循環每次循環依次比較大小并來回挪坑,直到把目標值…

轉載給ffmpeg入門級:我的第一個調用FFmpeg庫的程序出爐

好消息&#xff0c;寫了第一個使用了ffmpeg的庫的小程序。看起來就是這么簡單的一個消息&#xff0c;但是you have no idea how much work that I did before it works...廢話少說&#xff0c;總結記錄之。。。一、安裝好Linux的虛擬機。我用的是FEDORA-16&#xff0c;當然別的…

runC爆嚴重安全漏洞,主機可被攻擊!使用容器的快打補丁

容器的安全性一直是容器技術的一個短板。關于容器最大的安全隱患是攻擊者可以使用惡意程序感染容器&#xff0c;更嚴重時可以攻擊主機系統。 2月11日&#xff0c;安全研究員Adam Iwaniuk和BorysPop?awski發現了容器運行時runC的一個安全漏洞&#xff0c;這個漏洞可以讓上述情況…

pandas操作sql數據庫

導包 import pymssql from sqlalchemy import create_engine import pandas as pd 連接數據庫 #讀數據 conn pymssql.connect(server.,user sa,password test,databasepos) sql select * from stock_data df0 pd.read_sql(sql,conn) 寫入數據 df pd.read_csv(option_…

MongoDB Mobile Sync for iOS推出Beta版本

2019年2月11日&#xff0c;MongoDB官方博客發文稱MongoDB Mobile Sync for iOS的Beta版本即將推出。MongoDB Mobile支持使用單一查詢語言進行本地和遠程數據訪問&#xff0c;包含兩個核心部分&#xff1a; MongoDB數據庫的移動優化版本&#xff0c;運行在本地設備上&#xff0c…

gdb好文章:GDB十分鐘教程

&#xff08;GUI調試器&#xff1a;insight和ddd&#xff09; list(l) &#xff1a;其作用就是列出程序的源代碼&#xff0c;默認每次顯示10行。 list 行號&#xff1a;將顯示當前文件以“行號”為中心的前后10行代碼&#xff0c;如&#xff1a;list 12 list 行號1,行號2: 將…

機器學習預測+akshare

import pandas as pd import akshare as ak import numpy as np import talib from datetime import datetime, timedelta import time 獲取股票數據 from_date 2010-01-01 from_date datetime.strptime(from_date,"%Y-%m-%d") day_nums 1 current_dt time.st…

[python作業AI畢業設計博客]比Selenium IDE更好用的錄制工具: Katalon Recorder

Selenium IDE(集成開發環境 Integrated Development Environment)是用于構建測試腳本的原型工具。 它是一個Firefox插件&#xff0c;提供了易于使用的界面&#xff0c;用于開發自動化測試。 但是最新的Selenium IDE總是彈出一系列如下的對話框&#xff0c;不能直接錄制&#xf…

CentOS 7 : Docker私有倉庫搭建和使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 系統環境&#xff1a; CentOS 7.2 192.168.0.179&#xff1a;docker倉庫 192.168.0.60&#xff1a;客戶端 安裝并啟動docker yum -y…

價值投資/指標選股(akshare)

利用akshare的數據源&#xff0c;可以獲取所有的股票數據以及公開的財務數據&#xff0c;可以進行條件篩選&#xff0c;獲取滿足條件的股票。 這套模板可以用于價值投資&#xff0c;指標選股。選股周期為日線級別。然后結果可以郵箱發送。 import time import akshare as ak #…