從windows到linux — 編程篇 — cygwin,在win中開發linux程式

來源:互聯網
上載者:User

從windows到linux -- 編程篇 -- cygwin,在win中開發linux程式
    乾坤一笑[smileonce]    smileonce@126.com   2004-7-23
    著作權 轉載請註明出處  http://blog.csdn.net/smileonce

    很多用windows的朋友不習慣於用linux的開發環境。雖然很樂意嘗試一下,但是往往怕linux系統打亂了自己的正常生活:1〉裝linux系統把windows系統給搞壞了,導致自己無法正常生活;2>linux開發上手太難,寫出第一個helloworld不亞於java的難度,環境配置摸不著頭腦。 對於此,我的看法是:路不管平還是陡,終歸你要走的,如果你願意投入到linux開發的社群中來,不會安裝linux系統,不會配置工作環境是不能想象的。(事實上,確實要瞭解很多東西的原理,不然很難排錯:諸如,硬碟引導器的引導原理、分區結構原理及linux分區結構和檔案系統、環境變數的設定、種類繁多的壓縮包安裝包的解壓安裝方法、使用者系統管理權限管理等常用命令、以至於驅動安裝系統中文化等等異常瑣碎的東東)。

本文試圖跳過這個難走的步驟,啟用一個win環境下的linux模擬器(和linux下面的命令列開發環境基本一致),用短短的20分鐘的時間,教你做出一個純正的linux下gcc編譯的helloworld。就象是買點心前先嘗嘗味道,不也是一件很愉快的事情嗎?(註:cygwin事實上不僅有此類比功能,它也是移植unix<-->win程式的一個很有效工具,也有人用它來做嵌入式系統開發)

一、cygwin是什嗎?
   這個問題你最好google一下"cygwin的曆史",或許能夠獲得更為詳盡的答案。簡而言之,cygwin是一個在windows平台上啟動並執行linux類比環境,是cygnus solutions公司開發的自由軟體(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收購)。插一句廢話,很多朋友不明白linux和unix的區別和聯絡,在此也簡要介紹一下。UNIX是一個註冊商標,是要滿足一大堆條件並且支付可觀費用才能夠被授權使用的一個作業系統;linux是unix的複製版本,是由其創始人Linus和諸多世界知名的駭客手工打造的一個作業系統。為什麼linux和unix之間有很多軟體可以很輕鬆的移植?因為linux也滿足POSIX規範,所以在運行機制上跟unix相近。  
   以下引用網上的一段話(出處:http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
用於說明cygwin的工作機制:cygnus當初首先把gcc,gdb,gas等開發工具進行了改進,使他們能夠產生並解釋win32的目標檔案。然後,他們要把這些工具移植到windows平台上去。一種方案是基於win32 api對這些工具的原始碼進行大幅修改,這樣做顯然需要大量工作。因此,他們採取了一種不同的方法——他們寫了一個共用庫(就是cygwin dll),把win32 api中沒有的unix風格的調用(如fork,spawn,signals,select,sockets等)封裝在裡面,也就是說,他們基於win32 api寫了一個unix系統庫的類比層。這樣,只要把這些工具的原始碼和這個共用庫串連到一起,就可以使用unix主機上的交叉編譯器來產生可以在windows平台上啟動並執行工具集。以這些移植到windows平台上的開發工具為基礎,cygnus又逐步把其他的工具(幾乎不需要對原始碼進行修改,只需要修改他們的配置指令碼)軟體移植到windows上來。這樣,在windows平台上運行bash和開發工具、使用者工具,感覺好像在unix上工作。關於cygwin實現的更詳細描述,請參考http://cygwin.com/cygwin-ug-net/highlights.html

二、cygwin的安裝。
  cygwin的安裝檔案很容易通過google找到。目前國內的網站上有“網路安裝版”和"本地安裝版"兩種。標準的發行版應該是  網路安裝版。兩者並無大不同,下面介紹一下安裝的過程。

  step1. 下載後,點擊安裝檔案(setup.exe)進行安裝,第一個畫面是GNU著作權說明,點"下一步(N)—>",
進入安裝模式選擇畫面。

  step2. 安裝模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三種。"Install form Internet"就是直接從internet上裝,適用於網速較快的情況。如果你和我一樣網速不是很快,或者說裝過之後想把下載的安裝檔案儲存起來,下次不再下載了直接安裝,就應該選擇"Download form Internet",下載安裝的檔案(大約40M左右)。
事實上,所謂的"本地安裝版",也是別人從網上下載全部檔案後打的包(適用於中國國情嘛^_^)
 
  step3. 接下來是選擇安裝目的路徑和安裝源檔案所在的路徑,之後就進入了選擇安裝包所在的路徑。
注意了阿,這裡可是重頭戲。我第一安裝的時候就是沒有看清這一步,結果沒有把gcc裝進去,導致沒法編譯檔案。
   + All  Default
      + Admin Default
       ....
      + Devel   Default
      + Editors Default
      ....
如所示,你在這個TreeView的某個節點上雙擊,就可以改變它的狀態,如Default、Install、Uninstall、Reinstall四種狀態。預設的都是Default狀態,很多工具的預設狀態都是不安裝。
在這裡我選擇了在All這一行上後面的Default上點Install,全部安裝,以免後患。(注意:這裡的樹形控制項和win下面的不同,你試試驗在All上點 和 在All這一行後面的Default上點,會有不同的響應)

  step4. 點下一步,安裝成功。它會自動在你的案頭上建立一個捷徑。

 

  好了,下面就開始我的linux旅程了。雙擊cygwin的捷徑進入系統。
首先介紹幾個簡單的linux命令。
pwd   顯示當前的路徑
cd    改變當前路徑,無參數時進入對應使用者的home目錄
ls    列出目前的目錄下的檔案。此命令有N多參數,比如ls -al
ps    列出當前系統進程
kill  殺死某個進程
mkdir 建立目錄
rmdir 刪除目錄
rm    刪除檔案
mv    檔案改名或目錄改名
man   線上說明
less  顯示檔案的最末幾行

由於linux下面的命令大多都有很多參數,可以組合使用。所以,每當你不會或者記不清楚改用那個參數,那個開關的時候,可以用man來尋找,比如,我想尋找ls怎麼使用,可以鍵入
$  man ls
系統回顯資訊如下:
LS(1)                          FSF                          LS(1)
NAME
       ls - list directory contents
SYNOPSIS
       ls [OPTION]... [FILE]...
DESCRIPTION
       List information about the FILEs (the current directory by
       default).  Sort entries alphabetically if none of -cftuSUX
       nor --sort.
       -a, --all
             do not hide entries starting with .
       -A, --almost-all
             do not list implied . and ..
       -b, --escape
             print octal escapes for nongraphic characters
       --block-size=SIZE
             use SIZE-byte blocks
:
很全是吧,嘿嘿。

好了,多說無意,讓我們來寫一個hello world程式。
# cd
  進入了/home/administrator目錄,我當前的登陸帳號是administrator

# mkdir source
  建立一個叫做source的子目錄

# cd source
  進入 /home/administrator/source

# vim hello.c

   啟動vim編輯器,來編寫程式。好了,現在有必要簡要介紹一下vim。
在linux界,有兩大編輯器最有曆史。其一是vi,其二是emacs。vi現在已經演化成了vim,比當前的vi更為強大。vim和emacs是兩種截然不同的東西,vim強調用簡潔的命令來完成功能,無論是尋找、替換、
Regex匹配、編譯、連結、排錯、函數間跳轉等等等等都在命令列中完成,並且它把方向鍵也整合在了hjkl四個鍵之上,可以說,用了vim基本上可以不用滑鼠了:p  emacs則是在功能強大上做文章,版本控制、類比多種編輯環境、對文本進行各種操作,可謂之一個強大的文本處理系統。emacs是用諸如Ctrl+Alt+K 之類的按鍵組合來控制的;vim則是用se(set 的縮寫)等簡潔命令來控制的。
   由於cygwin中只提供了vim(能不能自己裝emacs我還沒有試過),我們就先體驗一下vim吧:p
vim載入文字檔後分為命令模式和插入模式兩種。插入模式,顧名思義就是輸入編輯文本;命令模式,則是輸入各種vim的控制命令,常用的有:
   i  進入編輯模式
   h  左移
   j  下移
   k  上移
   l  右移
   w  存檔
   q  退出
   ! 強調執行

有些命令是可以組合使用的,如果你修改了某個檔案,想存檔退出,則可以使用wq;如果你想放棄存檔,直接退出則可以使用q!  好了大家體驗一下吧,記住:從編輯模式退回命令模式按"Esc",再按":",在輸入指令,從命令模式進入編輯模式用i,初次使用vim肯定很難受,嘿嘿,不過用多了就習慣了,確實很省勁。

我們編輯hello.c檔案,輸入:
#include

int main(void) {
  printf( "Hello World!");
}
然後,輸入wq命令退到命令列。
輸入編譯指令:
# gcc hello.c -o hello
編譯成功後可以看一下
# ls
看到hello.exe了吧,嘿嘿。
好,讓我們運行看看。
# ./hello
效果如何?不錯吧?

okey,現在玩一個C++的hello world,
# vim world.cpp
輸入:
#include
using namespace std;

void main() {
  cout << "Hello World!";
}
編譯C++程式要用g++
# g++ world.cpp -o world
運行一下哈,
# ./world

如何,效果不錯吧?諸位都是高手,走到這步應該編些簡單程式都不成問題了吧:p
好了,關於如何編寫makefile檔案,如何用gdb下次再說了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.