自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 下進行 C 或 C++ 編程時重要的 GCC 標(biāo)志

系統(tǒng) Linux
在本教程中,我介紹了一些可用于日常編譯的最重要的 GCC 標(biāo)志。我強烈推薦我最后提到的提示,因為它節(jié)省了很多時間并且使用起來非常方便。

如果您在 Linux 下進行 C 或 C++ 編程,則必然要采用 GNU GCC 來編譯 C 或 C++ 源代碼生成可執(zhí)行程序。

和往常一樣,您可以使用標(biāo)志來擴展功能。

那么讓我們看看一些最重要的 GCC 標(biāo)志。

重要的 GCC 標(biāo)志

為了便于理解,我將使用以下 C 程序:

#include<stdio.h>

int main(void)
{
printf("\n linuxmi.com \n");
return 0;
}

很簡單,對吧?不要以此議論我的編程技能哦。

1.使用-o指定輸出文件名

在最基本的術(shù)語中,您將按如下方式使用 GCC 編譯器:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc main.c

上面的命令將編譯程序并創(chuàng)建一個名稱為的可執(zhí)行文件a.out.:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? tree
.
├── a.out
└── main.c

0 directories, 2 files

要指定輸出可執(zhí)行文件名,您需要做的就是在文件名后附加-o標(biāo)志,如下所示:

gcc main.c -o Filename

例如,在這里,我將可執(zhí)行文件命名為linuxmi:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc main.c -o linuxmi

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? tree
.
├── a.out
├── linuxmi
└── main.c

0 directories, 3 files

2.使用 -Wall 啟用每個警告

如果您想打印每個警告以便您可以檢查您的代碼并使它比以往更好,請使用該-Wall標(biāo)志。

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -Wall main.c -o linuxmi

例如,在這里,我將使用不初始化變量的代碼:

#include<stdio.h>

int main(void)
{
int i;
printf("\n linuxmi.com [%d]\n", i);
return 0;
}

當(dāng)我執(zhí)行代碼時,它給了我一條警告‘i’ is used uninitialized:如下圖

3.使用 -l 鏈接共享庫

要將 C 程序與共享庫鏈接,您所要做的就是在共享庫的名稱后附加-l標(biāo)志。

例如,在這里我將代碼 main.c 與共享庫鏈接起來pthread?以生成最終的可執(zhí)行文件linuxmi:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc main.c -o Hello -lpthread

但是如果你想鏈接外部庫怎么辦?在這種情況下,您必須使用-L。

例如,在這里,我鏈接了存儲在 /home/linuxmi/LHB 中的共享庫“LHB”:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -L/home/linuxmi/LHB -o main.c linuxmi -lLHB

4.僅使用 -E 獲取預(yù)處理器輸出

預(yù)處理是編譯的第一階段,如果你只關(guān)心第一階段代碼發(fā)生了什么,你可以使用-E標(biāo)志。

在這里,我將標(biāo)準(zhǔn)輸出重定向到first-stage.i文件:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -E main.c > first-stage.i

5.使用 -S 獲取匯編代碼

如果您關(guān)心編譯期間的程序集輸出,可以使用-S標(biāo)志輕松生成。

在這里,我生成了main.c?名為 as的程序集輸出main.s:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -C main.c -o compiled

6.僅使用 -C 生成編譯后的代碼

要在沒有任何鏈接的情況下獲得編譯代碼,您所要做的就是使用-C標(biāo)志。

例如,在這里,我main.c?在名為的文件中生成了編譯代碼compiled:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -C main.c -o compiled

7.使用 -save-temps 生成所有中間文件

之前,我解釋了如何獲得預(yù)處理、匯編和編譯的輸出,但是如果我告訴您可以一次獲得所有這些結(jié)果呢?

它非常簡單,可以使用-save-temps標(biāo)志輕松生成。

假設(shè)我想為 main.c文 件生成所有中間文件,所以我需要遵循給定的命令:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -save-temps main.c

8.使用 -Werror 將警告轉(zhuǎn)換為錯誤

在測試時,我們程序員往往會忽略可能表明應(yīng)用程序中存在漏洞和安全威脅的警告。

為了使您的代碼堅如磐石,我建議您使用-Werror標(biāo)志將警告轉(zhuǎn)換為錯誤。

在這里,我使用的代碼會給你一個警告,說“undefined variable c”:

#include<stdio.h>

int main(void)
{
char c;
// Print the string
printf("\n LinuxMi.com [%d]\n", c);
return 0;
}

但是當(dāng)我-Werror在執(zhí)行時使用標(biāo)志時:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -Wall -Werror main.c -o linuxmi

它沒有警告,而是給了我一個錯誤:

9.使用 -fPIC 獲取與位置無關(guān)的代碼

對于那些處理動態(tài)鏈接的人來說,這個標(biāo)志可能是至關(guān)重要的,尤其是共享庫。

在創(chuàng)建共享庫時,您應(yīng)該擁有與位置無關(guān)的代碼,以便您可以從任何地址而不是靜態(tài)地址加載共享庫。

例如,在這里,我從 main.c?創(chuàng)建了一個名為libmain.so的共享庫:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -c -Wall -Werror -fPIC main.c

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? gcc -shared -o libmain.so main.o

10. 使用 -V 獲取詳細的編譯輸出

如果您想逐行了解 GCC 對您的代碼做了什么,您可以使用該-V標(biāo)志來獲得詳細的輸出。

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                     
? gcc -Wall -v main.c -o linuxmi

獎勵認(rèn)真學(xué)習(xí)的朋友:使用文件應(yīng)用 GCC 標(biāo)志

如果您使用同一組標(biāo)志來編譯程序,擁有一個包含必要選項的文件可以為您節(jié)省大量時間。

首先,讓我們使用 touch 命令創(chuàng)建一個文件:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                    
? touch Flags

現(xiàn)在,您可以使用任何您喜歡的文本編輯器來輸入標(biāo)志。只需確保用空格分隔它們即可。

我在文件中保存了 3 個標(biāo)志:

完成添加標(biāo)志后,您所要做的就是在文本文件中附加@符號:

如您所見,它將警告轉(zhuǎn)換為錯誤并創(chuàng)建了所有中間文件。

責(zé)任編輯:趙寧寧 來源: Linux迷
相關(guān)推薦

2010-01-11 09:28:34

C++編程

2024-06-28 10:04:09

2010-01-12 15:13:37

Visual C++環(huán)

2010-01-26 11:06:50

C++開發(fā)

2010-01-11 10:01:25

C++的編程工具

2013-06-24 15:32:00

c++GCC

2010-01-20 10:49:29

Visual C++界

2010-01-18 17:14:50

C++語言

2011-05-30 15:29:32

C++

2010-01-11 11:16:37

C++編程

2011-07-10 15:26:54

C++

2010-01-28 10:33:10

C++開發(fā)程序

2012-04-05 09:33:18

Visual Stud

2011-11-24 15:08:40

C++

2011-07-10 15:36:54

C++

2009-06-05 14:54:09

EclipseC++環(huán)境搭建

2010-01-13 11:02:50

C++環(huán)境

2012-09-21 10:30:56

Linux項目代碼覆蓋率

2010-01-20 14:35:55

C++調(diào)用

2022-04-22 15:06:59

C++PythonJava
點贊
收藏

51CTO技術(shù)棧公眾號