亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? compiler.html

?? 清華Linux講座
?? HTML
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
    <TITLE>Linux上的C/C++編譯器和調試器</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
    <META NAME="GENERATOR" CONTENT="StarOffice/5.1 (Linux)">
    <META NAME="AUTHOR" CONTENT="Yongming Wei">
    <META NAME="CREATED" CONTENT="20000329;17342600">
    <META >
    <STYLE>
    <!--
        H1 { color: #ffff00 }
        H2 { color: #ffff00 }
        H3 { color: #ff00ff }
        H4 { color: #ffff00 }
        TD P { color: #b880b8 }
        LI { color: #ffffff }
        P { color: #00ffff }
        A:link { color: #00b8ff }
        A:visited { color: #ff3366 }
    -->
    </STYLE>
</HEAD>
<BODY TEXT="#ffff00" LINK="#00b8ff" VLINK="#ff3366" BACKGROUND="../images/velvet.jpg">

<A HREF="prog_script.html"><IMG SRC="prev.gif" ALT="Previous"></A>
<A HREF="make.html"><IMG SRC="next.gif" ALT="Next"></A>
<A HREF="index.html"><IMG SRC="toc.gif" ALT="Contents"></A>

<H1 ALIGN=CENTER>1.8&nbsp;&nbsp;Linux 上的 C/C++ 編譯器和調試器<BR><BR>
</H1>

<UL>
    <LI><P>運行 gcc/egcs</LI>
    <LI><P>gcc/egcs 的主要選項</LI>
    <LI><P>gdb</LI>
    <LI><P>gdb 的常用命令</LI>
    <LI><P>gdb 使用范例</LI>
    <LI><P>其他程序/庫工具 (ar, objdump, nm, size, strings, strip, ...)</LI>
</UL>

<H3>1.8.1&nbsp;&nbsp;運行 gcc/egcs</H3>
<P>
Linux 中最重要的軟件開發工具是 GCC。GCC 是 GNU 的 C 和 C++ 編譯器。實際上,GCC 能夠編譯三種
語言:C、C++ 和 Object C(C 語言的一種面向對象擴展)。利用 gcc 命令可同時編譯并連接 C 和 
C++ 源程序。
</P>

<P>
#DEMO#: hello.c
</P>

<PRE>
如果你有兩個或少數幾個 C 源文件,也可以方便地利用 GCC 編譯、連接并生成可執行文件。例如,假設你有
兩個源文件 main.c 和 factorial.c 兩個源文件,現在要編譯生成一個計算階乘的程序。
清單 factorial.c
-----------------------
#include <stdio.h>
#include <stdlib.h>

int factorial (int n)
{
    if (n <= 1)
        return 1;

    else
        return factorial (n - 1) * n;
}
-----------------------

-----------------------
清單  main.c
-----------------------
#include <stdio.h>
#include <stdlib.h>

int factorial (int n);

int main (int argc, char **argv)
{
    int n;

    if (argc < 2) {
        printf ("Usage: %s n\n", argv [0]);
        return -1;
    }
    else {
        n = atoi (argv[1]);
        printf ("Factorial of %d is %d.\n", n, factorial (n));
    }

    return 0;
}
-----------------------
利用如下的命令可編譯生成可執行文件,并執行程序:
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.
</PRE>

<PRE>
GCC 可同時用來編譯 C 程序和 C++ 程序。一般來說,C 編譯器通過源文件的后綴名來判斷是 C 程序還是 C+
+ 程序。在 Linux 中,C 源文件的后綴名為 .c,而 C++ 源文件的后綴名為 .C 或 .cpp。
但是,gcc 命令只能編譯 C++ 源文件,而不能自動和 C++ 程序使用的庫連接。因此,通常使用 g++ 命令來完
完成 C++ 程序的編譯和連接,該程序會自動調用 gcc 實現編譯。
假設我們有一個如下的 C++ 源文件(hello.C):

#include <iostream.h>

void main (void)
{
    cout << "Hello, world!" << endl;
}

則可以如下調用 g++ 命令編譯、連接并生成可執行文件:

$ g++ -o hello hello.C
$ ./hello
Hello, world!

</PRE>

<H3>1.8.2&nbsp;&nbsp;gcc/egcs 的主要選項</H3>
<PRE>
                表 1-3  gcc 命令的常用選項
選項                解釋
-ansi               只支持 ANSI 標準的 C 語法。這一選項將禁止 GNU C 的某些特色,
                    例如 asm 或 typeof 關鍵詞。
-c                  只編譯并生成目標文件。
-DMACRO             以字符串“1”定義 MACRO 宏。
-DMACRO=DEFN        以字符串“DEFN”定義 MACRO 宏。
-E                  只運行 C 預編譯器。
-g                  生成調試信息。GNU 調試器可利用該信息。
-IDIRECTORY         指定額外的頭文件搜索路徑DIRECTORY。
-LDIRECTORY         指定額外的函數庫搜索路徑DIRECTORY。
-lLIBRARY           連接時搜索指定的函數庫LIBRARY。
-m486               針對 486 進行代碼優化。
-o FILE             生成指定的輸出文件。用在生成可執行文件時。
-O0                 不進行優化處理。
-O 或 -O1           優化生成代碼。
-O2                 進一步優化。
-O3                 比 -O2 更進一步優化,包括 inline 函數。
-shared             生成共享目標文件。通常用在建立共享庫時。
-static             禁止使用共享連接。
-UMACRO             取消對 MACRO 宏的定義。
-w                  不生成任何警告信息。
-Wall               生成所有警告信息。
</PRE>
<P></P>

<H3>1.8.3&nbsp;&nbsp;gdb</H3>
<PRE>
GNU 的調試器稱為 gdb,該程序是一個交互式工具,工作在字符模式。在 X Window 系統中,有一個 gdb 的
前端圖形工具,稱為 xxgdb。gdb 是功能強大的調試程序,可完成如下的調試任務:
* 設置斷點;
* 監視程序變量的值;
* 程序的單步執行;
* 修改變量的值。
在可以使用 gdb 調試程序之前,必須使用 -g 選項編譯源文件??稍?makefile 中如下定義 CFLAGS 變量:
CFLAGS = -g
運行 gdb 調試程序時通常使用如下的命令:
gdb progname

在 gdb 提示符處鍵入help,將列出命令的分類,主要的分類有:
* aliases:命令別名
* breakpoints:斷點定義;
* data:數據查看;
* files:指定并查看文件;
* internals:維護命令;
* running:程序執行;
* stack:調用棧查看;
* statu:狀態查看;
* tracepoints:跟蹤程序執行。
鍵入 help 后跟命令的分類名,可獲得該類命令的詳細清單。

</PRE>

<P>#DENO#</P>

<H3>1.8.4&nbsp;&nbsp;gdb 的常用命令</H3>
<PRE>
                表 1-4  常用的 gdb 命令
命令                        解釋
break NUM               在指定的行上設置斷點。
bt                      顯示所有的調用棧幀。該命令可用來顯示函數的調用順序。
clear                   刪除設置在特定源文件、特定行上的斷點。其用法為:clear FILENAME:NUM。
continue                繼續執行正在調試的程序。該命令用在程序由于處理信號或斷點而
                        導致停止運行時。
display EXPR            每次程序停止后顯示表達式的值。表達式由程序定義的變量組成。
file FILE               裝載指定的可執行文件進行調試。
help NAME               顯示指定命令的幫助信息。
info break              顯示當前斷點清單,包括到達斷點處的次數等。
info files              顯示被調試文件的詳細信息。
info func               顯示所有的函數名稱。
info local              顯示當函數中的局部變量信息。
info prog               顯示被調試程序的執行狀態。
info var                顯示所有的全局和靜態變量名稱。
kill                    終止正被調試的程序。
list                    顯示源代碼段。
make                    在不退出 gdb 的情況下運行 make 工具。
next                    在不單步執行進入其他函數的情況下,向前執行一行源代碼。
print EXPR              顯示表達式 EXPR 的值。
<P></P>

<H3>1.8.5&nbsp;&nbsp;gdb 使用范例</H3>
<PRE>
-----------------
清單  一個有錯誤的 C 源程序 bugging.c
-----------------
#include <stdio.h>
#include <stdlib.h>

static char buff [256];
static char* string;
int main ()
{

    printf ("Please input a string: ");
    gets (string);

    printf ("\nYour string is: %s\n", string);
}
-----------------
上面這個程序非常簡單,其目的是接受用戶的輸入,然后將用戶的輸入打印出來。該程序使用了一個未經過初
始化的字符串地址 string,因此,編譯并運行之后,將出現 Segment Fault 錯誤:
$ gcc -o test -g test.c
$ ./test
Please input a string: asfd
Segmentation fault (core dumped)
為了查找該程序中出現的問題,我們利用 gdb,并按如下的步驟進行:
1.運行 gdb bugging 命令,裝入 bugging 可執行文件;
2.執行裝入的 bugging 命令;
3.使用 where 命令查看程序出錯的地方;
4.利用 list 命令查看調用 gets 函數附近的代碼;
5.唯一能夠導致 gets 函數出錯的因素就是變量 string。用 print 命令查看 string 的值;
6.在 gdb 中,我們可以直接修改變量的值,只要將 string 取一個合法的指針值就可以了,為此,我們在第
 11 行處設置斷點;
7.程序重新運行到第 11 行處停止,這時,我們可以用 set variable 命令修改 string 的取值;
8.然后繼續運行,將看到正確的程序運行結果。
</PRE>

<P>#DEMO#</P>

<H3>1.8.6&nbsp;&nbsp;其他程序/庫工具</H3>
<P>strip:</P>
<P>nm:</P>
<P>size:</P>
<P>string:</P>

<P>
<BR><BR>
</P>

<P ALIGN=CENTER>
<IMG SRC="../images/striped.gif" NAME="Ruler" ALIGN=BOTTOM WIDTH=532 HEIGHT=13 BORDER=0></P>

<P>
<BR><BR>
</P>

<A HREF="prog_script.html"><IMG SRC="prev.gif" ALT="Previous"></A>
<A HREF="make.html"><IMG SRC="next.gif" ALT="Next"></A>
<A HREF="index.html"><IMG SRC="toc.gif" ALT="Contents"></A>

</BODY>
</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一主播视频| 国产在线一区二区综合免费视频| 丁香婷婷综合激情五月色| 久久亚洲捆绑美女| www.av亚洲| 美女www一区二区| 国产精品久久久久久久久免费桃花| 91色在线porny| 日本成人在线不卡视频| 国产精品久久久久7777按摩 | 亚洲欧洲国产专区| 欧美在线观看视频一区二区| 久久成人麻豆午夜电影| 一区二区三区在线视频观看| 久久久久久电影| 3d成人h动漫网站入口| 99re视频精品| 成人午夜在线播放| 国产一区二区视频在线| 日本少妇一区二区| 亚洲第一激情av| 亚洲成人7777| 亚洲r级在线视频| 亚洲国产日韩a在线播放性色| 亚洲天堂成人网| 亚洲精品久久嫩草网站秘色| 中国av一区二区三区| 久久久精品综合| 国产精品理论片| 一区二区三区高清不卡| 亚洲愉拍自拍另类高清精品| 亚洲精品国产精华液| 午夜电影一区二区三区| 欧美图区在线视频| 久久激情综合网| 日韩精品一二三区| 亚洲美女视频在线观看| 亚洲日本韩国一区| 午夜国产精品一区| 另类人妖一区二区av| 国产精品 日产精品 欧美精品| 国产一区二区导航在线播放| 高清在线成人网| 在线视频国内自拍亚洲视频| 欧美日韩一区在线| 精品少妇一区二区三区免费观看| 久久综合九色综合久久久精品综合| 2023国产精品视频| 亚洲黄色片在线观看| 蓝色福利精品导航| 色综合中文字幕| 久久久影视传媒| 五月天精品一区二区三区| 国产精品一二三四五| 色综合久久综合网欧美综合网| 正在播放亚洲一区| 国产精品免费免费| 国产一区二区三区四区在线观看| 在线观看免费成人| 国产精品乱子久久久久| 久久精品99国产精品日本| 91精彩视频在线观看| 国产精品视频观看| 处破女av一区二区| 久久综合久久久久88| 蜜桃一区二区三区在线观看| 色哟哟精品一区| 亚洲欧美欧美一区二区三区| 国产麻豆精品在线| 国产亚洲欧美日韩俺去了| 精品无人区卡一卡二卡三乱码免费卡| 色婷婷久久综合| 亚洲成人在线观看视频| 欧美性一级生活| 香蕉影视欧美成人| 911精品国产一区二区在线| 天天综合日日夜夜精品| 欧美日韩国产另类一区| 青青草视频一区| 精品国产乱码久久久久久蜜臀 | 成人视屏免费看| 中文字幕欧美一| 欧美日韩一级大片网址| 美腿丝袜亚洲色图| 久久精品欧美一区二区三区麻豆| 国产精品自在在线| 一二三四社区欧美黄| 欧美一区二区网站| 成人av在线播放网址| 亚洲主播在线观看| 亚洲精品一线二线三线无人区| 国产成+人+日韩+欧美+亚洲| 亚洲最快最全在线视频| 精品剧情在线观看| 在线视频欧美精品| 国产成人综合在线播放| 亚洲va国产天堂va久久en| 国产精品情趣视频| 精品久久久久久久人人人人传媒 | 国产精品一区二区无线| 这里只有精品99re| 国产成人精品免费在线| 一区二区视频在线看| 国产欧美日韩在线观看| 欧美大片国产精品| 欧美一区二区日韩一区二区| 色狠狠一区二区| eeuss鲁片一区二区三区在线观看| 蜜臀91精品一区二区三区| 视频一区中文字幕| 日韩国产精品久久久| 日韩国产欧美一区二区三区| 亚洲精品欧美二区三区中文字幕| 国产喂奶挤奶一区二区三区| 国产欧美日韩另类一区| 国产日本欧美一区二区| 国产欧美综合色| 国产精品国产三级国产三级人妇| 国产精品免费丝袜| 一区二区三区在线不卡| 偷拍日韩校园综合在线| 久久国产麻豆精品| 成人av在线资源网| 欧美日韩日日摸| 国产亚洲短视频| 一个色妞综合视频在线观看| 蜜桃久久精品一区二区| 丁香另类激情小说| 91麻豆精品国产自产在线观看一区| 欧美一级精品在线| 国产精品久久久久久久浪潮网站| 亚洲一区二区三区免费视频| 国产一区二区视频在线| 日本电影亚洲天堂一区| 精品国产乱码久久久久久老虎| 中文字幕乱码一区二区免费| 日本视频一区二区| 欧美日韩综合在线免费观看| 久久免费美女视频| 免费看欧美美女黄的网站| a级高清视频欧美日韩| 久久综合色综合88| 美女诱惑一区二区| 欧美日韩国产在线观看| 国产精品福利电影一区二区三区四区| 亚洲丶国产丶欧美一区二区三区| 成人免费毛片app| 欧美va亚洲va香蕉在线| 亚洲国产日产av| 欧美亚州韩日在线看免费版国语版| 国产欧美一区二区精品性| 国产一区二区三区电影在线观看| 欧美亚日韩国产aⅴ精品中极品| 亚洲情趣在线观看| 成人av电影观看| 国产片一区二区三区| 成人高清视频在线| 国产精品成人在线观看| 色综合久久久久网| 午夜影视日本亚洲欧洲精品| 7777精品伊人久久久大香线蕉| 亚洲精品国产a| 91福利视频久久久久| 亚洲午夜一二三区视频| 欧美一区午夜视频在线观看| 秋霞电影网一区二区| 亚洲国产成人私人影院tom| 色婷婷综合久久久中文一区二区| 亚洲妇熟xx妇色黄| 日韩欧美卡一卡二| 99精品久久只有精品| 肉丝袜脚交视频一区二区| 久久久久国产成人精品亚洲午夜| 国产91精品露脸国语对白| 亚洲黄色av一区| 中文字幕第一区| 欧美一卡在线观看| 99久久婷婷国产综合精品| 午夜视频一区二区| 国产精品久久久久aaaa| 日韩欧美在线1卡| 欧美日韩国产综合视频在线观看| 国产激情偷乱视频一区二区三区| 五月天激情小说综合| 亚洲天天做日日做天天谢日日欢| 欧美一级日韩不卡播放免费| 91女神在线视频| 国产a精品视频| 国产一区二区主播在线| 日韩和的一区二区| 夜夜操天天操亚洲| 亚洲一区视频在线观看视频| 国产精品黄色在线观看| 国产精品久久久久婷婷| 欧美国产一区二区在线观看| 欧美国产日韩在线观看| 中文字幕视频一区| 亚洲精品久久久蜜桃| 亚洲成人精品在线观看| 一区二区三区.www|