2011年7月7日 星期四

1.1 如何編譯及執行程式

第 1 講 之 1    Say Hello
       Topic: 如何編譯及執行程式
請你先用編輯器 (editor) 編輯 hello.c 這個檔,它的內容如下:
/* hello.c */
#include <stdio.h>

int main (void)
{
    printf ("Hello, world!\n");
    return 0;
}
接下來我們準備執行這個程式,請在 UNIX 提示號下鍵入以下高亮度字元:

[thccy14]/Oz/u/u80/ee/u801833/program> gcc -o hello hello.c
[thccy14]/Oz/u/u80/ee/u801833/program> ./hello
Hello, world!

當你輸入了 gcc -o hello hello.c 卻出現了這個訊息時
gcc: Command not found
那麼表示你的工作站上沒有 gcc 這個編譯器 (compiler),這時候請你把 gcc 換成 cc,也就是說,請你輸入
cc -o hello hello.c
代替我們例子中 gcc 那一行。請各位特別注意小寫英文字母 o 和數字 0 的差別。

gcc -o hello hello.c 這一行究竟代表什麼意思呢?其實 gcc 是一個 C 語言的編譯器 (compiler),編譯器的工作就是負責把程式重編之後翻譯成可執行檔用的。一個程式必須經過下面的流程才可以變成可執行檔:
                        原始碼 (source code)
                            ↓
                        編譯器編譯 (compiled by compiler)
                            ↓
                        目的碼 (object code)
                            ↓
                        連結器連結程式庫 (link library by linker)
                            ↓
                        可執行檔 (executable file)
而本行的參數和它們的意思如下:
                        gcc -o hello hello1.c
                            ^  ^     ^
                            |  |     這個是你所要編譯的程式名稱
                            |  這個是你編譯出來後可執行檔的名字
                            這個是指定可執行檔名字的參數
如果你不加 -o hello,也就是直接打 gcc hello1.c 的話,那編出來的可執行檔自動被命名為 a.out。gcc 其他的參數我們以後用到再講。

你或許會覺得奇怪,程式不是要經過編譯器和連結器才可以變成可執行檔嗎?可是 gcc 只是一個編譯器而已,它怎麼可以造出可執行檔呢?這是因為 gcc 編譯完程式之後,會偷偷地呼叫 ld 這個連結器,造出可執行檔來。

沒有留言:

張貼留言