1.建一個目錄
2.寫代碼,建一個hello.c文件
代碼:
< class="ViewSource" rel="nofollow" style="box-sizing: border-box;outline: 0px;color: rgb(103, 149, 181);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/Yd5A7Cl21m4hiccZ4QpuUnPUuM8EQpfZdian4CriaHPzV0bXhbvnwoFkwHlKSoWRzRgxMERFP3oCtJxZz7icsLhIhQ/640?wx_fmt=gif");background-position: left top;background-size: initial;background-repeat: no-repeat;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: inherit;border-width: initial;border-style: none;border-color: initial;padding: 1px;margin-right: 10px;word-break: break-all;display: inline-block;width: 16px;height: 16px;text-indent: -2000px;" target="_self" title="view plain">view plain< class="CopyToClipboard" rel="nofollow" style="box-sizing: border-box;outline: 0px;color: rgb(103, 149, 181);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/Yd5A7Cl21m4hiccZ4QpuUnPUuM8EQpfZdAbOXa8oicYJW4EAmgLUH0SNj4v9wju4KzA76TP9yPJhEgxr0uX4icBIg/640?wx_fmt=gif");background-position: left top;background-size: initial;background-repeat: no-repeat;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: inherit;border-width: initial;border-style: none;border-color: initial;padding: 1px;margin-right: 10px;word-break: break-all;display: inline-block;width: 16px;height: 16px;text-indent: -2000px;" target="_self" title="copy to clipboard">copy to clipboard
#include"stdio.h"
main()
{
printf("HelloLinux.\n")
}
#include"stdio.h"
main()
{
printf("Hello Linux.\n")
}
記得最后一定要換行
3.編譯
gcc-ohellohello.c
使用gcc編譯器就會為我們生成一個hello的可執(zhí)行文件
4.輸出
執(zhí)行./hello就可以看到程序的輸出結(jié)果了.
是不是很簡單?
命令行中g(shù)cc表示我們是用gcc來編譯我們的源程序,-o選項表示我們要求編譯器給我們輸出的可執(zhí)行文件名為hello而hello.c是我們的源程序文件.gcc編譯器有許多選項,一般來說我們只要知道其中的幾個就夠了.-o選項我們已經(jīng)知道了,表示我們要求輸出的可執(zhí)行文件名.-c選項表示我們只要求編譯器輸出目標(biāo)代碼,而不必要輸出可執(zhí)行文件.-g選項表示我們要求編譯器在編譯的時候提供我們以后對程序進(jìn)行調(diào)試的信息.知道了這三個選項,我們就可以編譯我們自己所寫的簡單的源程序了,如果你想要知道更多的選項,可以查看gcc的幫助文檔,那里有著許多對其它選項的詳細(xì)說明.
下面我們來演示怎樣用GDB來調(diào)試一個求0+1+2+3+…+99的程序:
/* Filename:hello.c */ #include "stdio.h"main(){int i, sum;sum = 0;for (i = 0; i < 100; i++){sum + = i;}printf("the sum of 1+2+...+ is %d", sum);} |
執(zhí)行如下命令編譯hello.c(加-g選項產(chǎn)生debug信息):#gcc –g –ohello sum.c在命令行上鍵入gdb hello并按回車鍵就可以開始調(diào)試sum了,再運(yùn)行run命令執(zhí)行sum
#gdb hello
list命令用于列出源代碼,對上述程序兩次運(yùn)行l(wèi)ist,將出現(xiàn)如上畫面(源代碼被標(biāo)行號)。
根據(jù)列出的源程序,如果我們將斷點設(shè)置在第5行,只需在gdb 命令行提示符下鍵入如下命令設(shè)置斷點:(gdb) break 5
設(shè)置斷點的另一種語法是 break
watch
next、step命令的區(qū)別在于step遇到函數(shù)調(diào)用,會跳轉(zhuǎn)到到該函數(shù)定義的開始行去執(zhí)行,而next則不進(jìn)入到函數(shù)內(nèi)部,它把函數(shù)調(diào)用語句當(dāng)作一條普通語句執(zhí)行。
5.Makemake是所有想在Linux系統(tǒng)上編程的用戶必須掌握的工具,對于任何稍具規(guī)模的程序,我們都會使用到make,幾乎可以說不使用make的程序不具備任何實用價值。在此,我們有必要解釋編譯和連接的區(qū)別。編譯器使用源碼文件來產(chǎn)生某種形式的目標(biāo)文件(object files),在編譯過程中,外部的符號參考并沒有被解釋或替換(即外部全局變量和函數(shù)并沒有被找到)。因此,在編譯階段所報的錯誤一般都是語法錯誤。而連接器則用于連接目標(biāo)文件和程序包,生成一個可執(zhí)行程序。在連接階段,一個目標(biāo)文件中對別的文件中的符號的參考被解釋,如果有符號不能找到,會報告連接錯誤。編譯和連接的一般步驟是:第一階段把源文件一個一個的編譯成目標(biāo)文件,第二階段把所有的目標(biāo)文件加上需要的程序包連接成一個可執(zhí)行文件。這樣的過程很痛苦,我們需要使用大量的gcc命令。而make則使我們從大量源文件的編譯和連接工作中解放出來,綜合為一步完成。GNU Make的主要工作是讀進(jìn)一個文本文件,稱為makefile。這個文件記錄了哪些文件(目的文件,目的文件不一定是最后的可執(zhí)行程序,它可以是任何一種文件)由哪些文件(依靠文件)產(chǎn)生,用什么命令來產(chǎn)生。Make依靠此makefile中的信息檢查磁盤上的文件,如果目的文件的創(chuàng)建或修改時間比它的一個依靠文件舊的話,make就執(zhí)行相應(yīng)的命令,以便更新目的文件。假設(shè)我們寫下如下的三個文件,add.h用于聲明add函數(shù),add.c提供兩個整數(shù)相加的函數(shù)體,而main.c中調(diào)用add函數(shù):
/* filename:add.h */extern int add(int i, int j);/* filename:add.c */int add(int i, int j){return i + j;}/* filename:main.c */#include "add.h"main(){int a, b;a = 2;b = 3;printf("the sum of a+b is %d", add(a + b));} |
怎樣為上述三個文件產(chǎn)生makefile呢?如下:
test : main.o add.ogcc main.o add.o -o testmain.o : main.c add.hgcc -c main.c -o main.oadd.o : add.c add.hgcc -c add.c -o add.o |
上述makefile利用add.c和add.h文件執(zhí)行g(shù)cc -c add.c -o add.o命令產(chǎn)生add.o目標(biāo)代碼,利用main.c和add.h文件執(zhí)行g(shù)cc -c main.c -o main.o命令產(chǎn)生main.o目標(biāo)代碼,最后利用main.o和add.o文件(兩個模塊的目標(biāo)代碼)執(zhí)行g(shù)cc main.o add.o -o test命令產(chǎn)生可執(zhí)行文件test。我們可在makefile中加入變量,另外。環(huán)境變量在make過程中也被解釋成make的變量。這些變量是大小寫敏感的,一般使用大寫字母。Make變量可以做很多事情,例如:i) 存儲一個文件名列表;ii) 存儲可執(zhí)行文件名;iii) 存儲編譯器選項。要定義一個變量,只需要在一行的開始寫下這個變量的名字,后面跟一個=號,再跟變量的值。引用變量的方法是寫一個$符號,后面跟(變量名)。我們把前面的 makefile 利用變量重寫一遍(并假設(shè)使用-Wall -O –g編譯選項):
OBJS = main.o add.oCC = gccCFLAGS = -Wall -O -gtest : $(OBJS)$(CC) $(OBJS) -o testmain.o : main.c add.h$(CC) $(CFLAGS) -c main.c -o main.oadd.o : add.c add.h$(CC) $(CFLAGS) -c add.c -o add.o |
makefile 中還可定義清除(clean)目標(biāo),可用來清除編譯過程中產(chǎn)生的中間文件,例如在上述makefile文件中添加下列代碼:
clean:rm -f *.o |
運(yùn)行make clean時,將執(zhí)行rm -f *.o命令,刪除所有編譯過程中產(chǎn)生的中間文件。不管怎么說,自己動手編寫makefile仍然是很復(fù)雜和煩瑣的,而且很容易出錯。因此,GNU也為我們提供了Automake和Autoconf來輔助快速自動產(chǎn)生makefile,讀者可以參閱相關(guān)資料。7.小結(jié)本章主要闡述了Linux程序的編寫、編譯、調(diào)試方法及make,實際上就是引導(dǎo)讀者學(xué)習(xí)怎樣在Linux下編程,為后續(xù)章節(jié)做好準(zhǔn)備。
-
Linux
+關(guān)注
關(guān)注
87文章
11442瀏覽量
212609 -
C語言
+關(guān)注
關(guān)注
180文章
7629瀏覽量
140083 -
程序開發(fā)
+關(guān)注
關(guān)注
0文章
30瀏覽量
10527
發(fā)布評論請先 登錄
Linux下C應(yīng)用程序開發(fā)
Linux下C語言編程概述

TMS320C54xC源調(diào)試詳細(xì)資料概述

如何在Linux下如何刪除大量文件的詳細(xì)資料概述
如何在Win下安裝linux的虛擬機(jī)詳細(xì)安裝方法資料概述
C語言程序設(shè)計教程之C語言基礎(chǔ)的詳細(xì)資料概述

LINUX系統(tǒng)教程之如何在Linux系統(tǒng)下進(jìn)行編程
如何在Linux中使用gdb調(diào)試C程序

信號與定時器的使用在Linux系統(tǒng)下的C語言程序免費下載

嵌入式linux c語言,嵌入式LinuxC語言開發(fā)工具.pdf

評論