• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            從windows到linux -- 編程篇 -- cygwin,在win中開發(fā)linux程序(ZT)

            ?? 乾坤一笑[smileonce]??? smileonce@126.com?? 2004-7-23
            ??? 版權(quán)所有 轉(zhuǎn)載請注明出處? http://blog.csdn.net/smileonce

            ??? 很多用windows的朋友不習(xí)慣于用linux的開發(fā)環(huán)境。雖然很樂意嘗試一下,但是往往怕linux系統(tǒng)打亂了自己的正常生活:1〉裝linux系統(tǒng)把windows系統(tǒng)給搞壞了,導(dǎo)致自己無法正常生活;2>linux開發(fā)上手太難,寫出第一個helloworld不亞于java的難度,環(huán)境配置摸不著頭腦。對于此,我的看法是:路不管平還是陡,終歸你要走的,如果你愿意投入到linux開發(fā)的社群中來,不會安裝linux系統(tǒng),不會配置工作環(huán)境是不能想象的。(事實上,確實要了解很多東西的原理,不然很難排錯:諸如,硬盤引導(dǎo)器的引導(dǎo)原理、分區(qū)結(jié)構(gòu)原理及l(fā)inux分區(qū)結(jié)構(gòu)和文件系統(tǒng)、環(huán)境變量的設(shè)置、種類繁多的壓縮包安裝包的解壓安裝方法、用戶管理權(quán)限管理等常用命令、以至于驅(qū)動安裝系統(tǒng)中文化等等異常瑣碎的東東)。

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

            一、cygwin是什么?
            ?? 這個問題你最好google一下"cygwin的歷史",或許能夠獲得更為詳盡的答案。簡而言之,cygwin是一個在windows平臺上運(yùn)行的 linux模擬環(huán)境,是cygnus solutions公司開發(fā)的自由軟件(該公司開發(fā)了很多好東西,著名的還有eCos,不過現(xiàn)已被Redhat收購)。插一句廢話,很多朋友不明白 linux和unix的區(qū)別和聯(lián)系,在此也簡要介紹一下。UNIX是一個注冊商標(biāo),是要滿足一大堆條件并且支付可觀費用才能夠被授權(quán)使用的一個操作系統(tǒng); linux是unix的克隆版本,是由其創(chuàng)始人Linus和諸多世界知名的黑客手工打造的一個操作系統(tǒng)。為什么linux和unix之間有很多軟件可以很輕松的移植?因為linux也滿足POSIX規(guī)范,所以在運(yùn)行機(jī)制上跟unix相近。??
            ?? 以下引用網(wǎng)上的一段話(出處:http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
            用于說明cygwin的工作機(jī)制:cygnus當(dāng)初首先把gcc,gdb,gas等開發(fā)工具進(jìn)行了改進(jìn),使他們能夠生成并解釋win32的目標(biāo)文件。然后,他們要把這些工具移植到windows平臺上去。一種方案是基于win32 api對這些工具的源代碼進(jìn)行大幅修改,這樣做顯然需要大量工作。因此,他們采取了一種不同的方法——他們寫了一個共享庫(就是cygwin dll),把win32 api中沒有的unix風(fēng)格的調(diào)用(如fork,spawn,signals,select,sockets等)封裝在里面,也就是說,他們基于 win32 api寫了一個unix系統(tǒng)庫的模擬層。這樣,只要把這些工具的源代碼和這個共享庫連接到一起,就可以使用unix主機(jī)上的交叉編譯器來生成可以在 windows平臺上運(yùn)行的工具集。以這些移植到windows平臺上的開發(fā)工具為基礎(chǔ),cygnus又逐步把其他的工具(幾乎不需要對源代碼進(jìn)行修改,只需要修改他們的配置腳本)軟件移植到windows上來。這樣,在windows平臺上運(yùn)行bash和開發(fā)工具、用戶工具,感覺好像在unix上工作。關(guān)于cygwin實現(xiàn)的更詳細(xì)描述,請參考http://cygwin.com/cygwin-ug-net/highlights.html

            二、cygwin的安裝。
            ? cygwin的安裝文件很容易通過google找到。目前國內(nèi)的網(wǎng)站上有“網(wǎng)絡(luò)安裝版”和"本地安裝版"兩種。標(biāo)準(zhǔn)的發(fā)行版應(yīng)該是? 網(wǎng)絡(luò)安裝版。兩者并無大不同,下面介紹一下安裝的過程。

            ? step1. 下載后,點擊安裝文件(setup.exe)進(jìn)行安裝,第一個畫面是GNU版權(quán)說明,點"下一步(N)—>",
            進(jìn)入安裝模式選擇畫面。

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

            ? step4. 點下一步,安裝成功。它會自動在你的桌面上建立一個快捷方式。

            ?

            ? 好了,下面就開始我的linux旅程了。雙擊cygwin的快捷方式進(jìn)入系統(tǒng)。
            首先介紹幾個簡單的linux命令。
            pwd?? 顯示當(dāng)前的路徑
            cd??? 改變當(dāng)前路徑,無參數(shù)時進(jìn)入對應(yīng)用戶的home目錄
            ls??? 列出當(dāng)前目錄下的文件。此命令有N多參數(shù),比如ls -al
            ps??? 列出當(dāng)前系統(tǒng)進(jìn)程
            kill? 殺死某個進(jìn)程
            mkdir 建立目錄
            rmdir 刪除目錄
            rm??? 刪除文件
            mv??? 文件改名或目錄改名
            man?? 聯(lián)機(jī)幫助
            less? 顯示文件的最末幾行

            由于linux下面的命令大多都有很多參數(shù),可以組合使用。所以,每當(dāng)你不會或者記不清楚改用那個參數(shù),那個開關(guān)的時候,可以用man來查找,比如,我想查找ls怎么使用,可以鍵入
            $? man ls
            系統(tǒng)回顯信息如下:
            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
            ? 進(jìn)入了/home/administrator目錄,我當(dāng)前的登陸帳號是administrator

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

            # cd source
            ? 進(jìn)入 /home/administrator/source

            # vim hello.c

            ?? 啟動vim編輯器,來編寫程序。好了,現(xiàn)在有必要簡要介紹一下vim。
            在linux界,有兩大編輯器最有歷史。其一是vi,其二是emacs。vi現(xiàn)在已經(jīng)演化成了vim,比當(dāng)前的vi更為強(qiáng)大。vim和emacs是兩種截然不同的東西,vim強(qiáng)調(diào)用簡潔的命令來完成功能,無論是查找、替換、
            正則表達(dá)式匹配、編譯、鏈接、排錯、函數(shù)間跳轉(zhuǎn)等等等等都在命令行中完成,并且它把方向鍵也集成在了hjkl四個鍵之上,可以說,用了vim基本上可以不用鼠標(biāo)了:p? emacs則是在功能強(qiáng)大上做文章,版本控制、模擬多種編輯環(huán)境、對文本進(jìn)行各種操作,可謂之一個強(qiáng)大的文本處理系統(tǒng)。emacs是用諸如Ctrl+ Alt+K 之類的組合鍵來控制的;vim則是用se(set 的縮寫)等簡潔命令來控制的。
            ?? 由于cygwin中只提供了vim(能不能自己裝emacs我還沒有試過),我們就先體驗一下vim吧:p
            vim加載文本文件后分為命令模式和插入模式兩種。插入模式,顧名思義就是輸入編輯文本;命令模式,則是輸入各種vim的控制命令,常用的有:
            ?? i? 進(jìn)入編輯模式
            ?? h? 左移
            ?? j? 下移
            ?? k? 上移
            ?? l? 右移
            ?? w? 存盤
            ?? q? 退出
            ?? ! 強(qiáng)調(diào)執(zhí)行

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

            我們編輯hello.c文件,輸入:
            #include

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

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

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

            如何,效果不錯吧?諸位都是高手,走到這步應(yīng)該編些簡單程序都不成問題了吧:p
            好了,關(guān)于如何編寫makefile文件,如何用gdb下次再說了。

            posted on 2007-03-20 22:49 楊粼波 閱讀(428) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产成人无码精品久久久久免费 | 久久99中文字幕久久| 久久九九久精品国产免费直播| 久久99精品久久久久久秒播| 成人亚洲欧美久久久久| 97久久精品人妻人人搡人人玩| 国内精品久久久久影院一蜜桃| 久久精品毛片免费观看| 久久强奷乱码老熟女网站| 国产综合久久久久| 婷婷综合久久狠狠色99h| 国产成人精品久久一区二区三区av| 国内精品久久国产大陆| Xx性欧美肥妇精品久久久久久| 国产成人无码精品久久久久免费 | 国产免费久久久久久无码| 99久久99久久精品国产| 亚洲欧美日韩精品久久| 欧美久久一级内射wwwwww.| 色综合久久天天综线观看| 久久久一本精品99久久精品66| 精品国产一区二区三区久久| 国产91色综合久久免费| 亚洲综合久久综合激情久久 | 精品久久久久久国产| 久久人妻AV中文字幕| 一本久久a久久精品综合夜夜 | 精品国产乱码久久久久久郑州公司 | 97久久超碰国产精品旧版| 久久伊人亚洲AV无码网站| 亚洲va久久久久| av国内精品久久久久影院| 精品无码人妻久久久久久| 97精品久久天干天天天按摩| 国产精品欧美久久久久无广告| 亚洲午夜久久久久久噜噜噜| 国产精品免费久久久久久久久| 久久精品国产色蜜蜜麻豆| 久久国产精品久久精品国产| 久久嫩草影院免费看夜色| 久久国产精品国语对白|