成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 下進行 C 或 C++ 編程時重要的 GCC 標志

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

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

和往常一樣,您可以使用標志來擴展功能。

那么讓我們看看一些最重要的 GCC 標志。

重要的 GCC 標志

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

#include<stdio.h>

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

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

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

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

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

上面的命令將編譯程序并創建一個名稱為的可執行文件a.out.:

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

0 directories, 2 files

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

gcc main.c -o Filename

例如,在這里,我將可執行文件命名為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標志。

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;
}

當我執行代碼時,它給了我一條警告‘i’ is used uninitialized:如下圖

3.使用 -l 鏈接共享庫

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

例如,在這里我將代碼 main.c 與共享庫鏈接起來pthread?以生成最終的可執行文件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 獲取預處理器輸出

預處理是編譯的第一階段,如果你只關心第一階段代碼發生了什么,你可以使用-E標志。

在這里,我將標準輸出重定向到first-stage.i文件:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8.使用 -Werror 將警告轉換為錯誤

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

為了使您的代碼堅如磐石,我建議您使用-Werror標志將警告轉換為錯誤。

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

#include<stdio.h>

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

但是當我-Werror在執行時使用標志時:

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

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

9.使用 -fPIC 獲取與位置無關的代碼

對于那些處理動態鏈接的人來說,這個標志可能是至關重要的,尤其是共享庫。

在創建共享庫時,您應該擁有與位置無關的代碼,以便您可以從任何地址而不是靜態地址加載共享庫。

例如,在這里,我從 main.c?創建了一個名為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標志來獲得詳細的輸出。

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

獎勵認真學習的朋友:使用文件應用 GCC 標志

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

首先,讓我們使用 touch 命令創建一個文件:

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

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

我在文件中保存了 3 個標志:

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

如您所見,它將警告轉換為錯誤并創建了所有中間文件。

責任編輯:趙寧寧 來源: Linux迷
相關推薦

2010-01-11 09:28:34

C++編程

2024-06-28 10:04:09

2010-01-12 15:13:37

Visual C++環

2010-01-26 11:06:50

C++開發

2010-01-11 10:01:25

C++的編程工具

2013-06-24 15:32:00

c++GCC

2010-01-18 17:14:50

C++語言

2010-01-20 10:49:29

Visual C++界

2011-05-30 15:29:32

C++

2010-01-28 10:33:10

C++開發程序

2010-01-11 11:16:37

C++編程

2011-07-10 15:26:54

C++

2012-04-05 09:33:18

Visual Stud

2011-11-24 15:08:40

C++

2011-07-10 15:36:54

C++

2010-01-20 14:35:55

C++調用

2009-06-05 14:54:09

EclipseC++環境搭建

2010-01-13 11:02:50

C++環境

2012-09-21 10:30:56

Linux項目代碼覆蓋率

2022-04-22 15:06:59

C++PythonJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.日日干| 亚洲精品久久久久久久久久吃药 | 91精品国产乱码麻豆白嫩 | 免费视频一区二区 | 日美女逼逼 | 黄色欧美视频 | 99久久久久久| 美女一级毛片 | 日韩在线视频播放 | 可以看黄的视频 | 久久国产一区 | 美女操网站 | 91亚洲精品久久久电影 | 日韩黄a| ww亚洲ww亚在线观看 | 伊人久操 | 欧美一区二区三区久久精品视 | 精精国产xxxx视频在线 | 激情亚洲 | 99热成人在线 | 麻豆精品一区二区三区在线观看 | 久久精品福利视频 | 天堂亚洲 | 在线免费av电影 | 国产欧美精品区一区二区三区 | 免费日韩av | 成年人视频在线免费观看 | 九九精品视频在线 | 精品久久国产老人久久综合 | 午夜性色a√在线视频观看9 | 久久一二 | 热re99久久精品国99热观看 | 国内精品久久久久久影视8 最新黄色在线观看 | 国产欧美一区二区三区日本久久久 | 国产精品久久久久久吹潮 | 色妹子综合网 | 中文字幕在线第一页 | 日韩一二区 | 亚洲vs天堂 | 亚欧精品| 午夜精品一区二区三区免费视频 |