gcc有哪些常用選項,今天,就來給大家盤點一下。
-E表示預(yù)處理,處理所有以井號鍵開頭的代碼,常見的比如把頭文件展開。
hello.c
#include預(yù)處理:int main() { printf("helloworld "); return 0; }
gcc -E hello.c -o hello.i預(yù)處理后的文件:
# 1 "hello.c" # 1 "-S表示編譯,把C文件變成匯編文件。" # 1 " " # 31 " " # 1 "/usr/include/stdc-predef.h" 1 3 4 # 32 " " 2 # 1 "hello.c" # 1 "/usr/include/stdio.h" 1 3 4 # 27 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4 # 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4 # 1 "/usr/include/features.h" 1 3 4 # 461 "/usr/include/features.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4 # 452 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 453 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4 # 454 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 # 462 "/usr/include/features.h" 2 3 4 # 485 "/usr/include/features.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4 # 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4 # 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4 # 486 "/usr/include/features.h" 2 3 4 # 34 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 2 3 4 # 28 "/usr/include/stdio.h" 2 3 4 # 1 "hello.c" # 1 " " # 1 " " # 31 " " # 1 "/usr/include/stdc-predef.h" 1 3 4 # 32 " " 2 # 1 "hello.c" # 1 "/usr/include/stdio.h" 1 3 4 # 27 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4 # 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4 # 1 "/usr/include/features.h" 1 3 4 # 461 "/usr/include/features.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4 # 452 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 453 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 .....
還是使用hello.c源文件。
gcc -S hello.c -o hello.s匯編后的文件變成:
.file "hello.c" .text .section .rodata .LC0: .string "helloworld" .text .globl main .type main, @function main: .LFB0: .cfi_startproc endbr64 pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 ......-c表示匯編,把匯編文件變成二進(jìn)制文件,但是這個二進(jìn)制文件還不能運行,因為缺少庫的信息。
還是使用hello.c源文件:
gcc -c hello.c -o hello.o匯編后的文件是二進(jìn)制文件,用vim打開后是這樣:
?
-l表示鏈接庫的名字,比如我們經(jīng)常用的多線程,編譯的時候加上加上-lpthread 編譯器會自動去找 libpthread.so,如果代碼里面用到第三方庫,一般都要加上。
thread.c
#include編譯:#include #include void *my_thread(void *arg) { printf("this is my thread ... "); } int main() { pthread_t tid; if (pthread_create(&tid, NULL, my_thread, NULL) != 0) { perror("pthread_create"); exit(1); } void *status; pthread_join(tid, &status); return 0; }
gcc thread.c -o thread -lpthread-L表示庫的路徑。如果是你自己制作的庫文件,并且沒有放在系統(tǒng)指定的目錄下,比如 /lib,那編譯的時候就要加上庫的路徑,否則,編譯器找不到庫在哪。
假設(shè)有個動態(tài)庫叫做 libtest.so,存放在當(dāng)前目錄下:
root@Turbo:test# ls hello.c libtest.so
如果編譯的時候需要鏈接 libtest.so,則:
gcc main.c -o main -ltest -L .-I表示頭文件路徑,常用于自己寫的頭文件,不在當(dāng)前目錄下,那編譯的時候就得指定頭文件的路徑。
假設(shè) hello.c 源文件包含了 hello.h 頭文件:
#include"hello.h"hello.h存放在上一級目錄:
root@Turbo:test# ls hello.c root@Turbo:test# ls .. hello.h test編譯的時候,需要指定頭文件的路徑:
gcc hello.c -o hello -I ..-g表示可以調(diào)試,比如我們之前講的gdb、valgrind,如果想要調(diào)試的時候顯示源碼、行號,編譯的時候就需要加上-g選項。
gcc hello.c -o hello -g-O表示優(yōu)化,可以是O0到O3,我們之前講volatile的時候,就用過這個選項,不同的優(yōu)化等級,對代碼的處理略微有些區(qū)別。
hello.c
#include不優(yōu)化:#include void delay() { int i, j; for (i = 0; i < 100000; i++) { for (j = 0; j < 10000; j++); } } int main() { printf("%ld ", time(NULL)); delay(); printf("%ld ", time(NULL)); return 0; }
gcc hello.c -o hello運行結(jié)果:
root@Turbo:test# ./hello 1683603927 1683603929 root@Turbo:test#優(yōu)化:
gcc hello.c -o hello -O3運行結(jié)果:
root@Turbo:test# ./hello 1683603941 1683603941 root@Turbo:test#當(dāng)然,還有 -o,表示輸出的意思,用來指定編譯后生成文件的名字。
gcchello.c-o hello-Wall表示打開所有警告,有時候編譯器會認(rèn)為一些不規(guī)范的寫法影響不大,并不會提示出來,加上Wall,會把這些不重要的警告也打印出來。
hello.c
#include不打開警告編譯:int main() { int i; return 0; }
root@Turbo:test# gcc hello.c -o hello root@Turbo:test#打開警告編譯:
root@Turbo:test# gcc hello.c -o hello -Wall hello.c: In function ‘main’: hello.c:5:6: warning: unused variable ‘i’ [-Wunused-variable] 5 | int i; | ^ root@Turbo:test#-D表示添加宏定義,調(diào)試代碼的時候非常有用,可以避免每次都要修改代碼。
hello.c
#include編譯不提供宏定義:int main() { #ifdef HELLO printf("helloworld "); #endif return 0; }
gcc hello.c -o hello運行結(jié)果:
root@Turbo:test# ./hello root@Turbo:test#編譯提供宏定義:
root@Turbo:test# gcc hello.c -o hello -DHELLO root@Turbo:test#運行結(jié)果:
root@Turbo:test# ./hello helloworld
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
795瀏覽量
41716 -
GCC
+關(guān)注
關(guān)注
0文章
108瀏覽量
24861 -
VIM
+關(guān)注
關(guān)注
0文章
134瀏覽量
15313
原文標(biāo)題:gcc常用選項盤點
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
不常見但是很有用的 gcc 命令行選項
一些特殊的警告嗎?gcc 的很多命令行選項都不會經(jīng)常用到,但是它們在某些特定的情況下會變得非常有用,例如,當(dāng)你在調(diào)試代碼的時候。所以在本文中
發(fā)表于 12-31 11:08
嵌入式Linux工具之GCC常用編譯選項
“-I dir”選項可以在頭文件的搜索路徑列表中添加 dir 目錄。由于 Linux 中頭文件都默認(rèn)放到了“/usr/include/”目錄下,因此,當(dāng)用戶希望添加放置在其他位置的頭文件時,就可以通過“-I dir”選項來指定,這樣,g
盤點一下哪些手機(jī)支持5G網(wǎng)絡(luò)呢
隨著5G網(wǎng)絡(luò)的推廣,各大廠商也開始陸續(xù)推出支持5G網(wǎng)絡(luò)的手機(jī)。今天為大家盤點一下,究竟哪些手機(jī)支持5G網(wǎng)絡(luò)呢。
Linux和UNIX的GCC命令大全
GCC 有超過 100 個的編譯選項可用。 這些選項中的許多你可能永遠(yuǎn)都不會用到, 但一些主要的選項
發(fā)表于 11-01 08:00
?0次下載
Linux系統(tǒng)下Gcc的基本用法和選項
在使用Gcc編譯器的時候,我們必須給出一系列必要的調(diào)用參數(shù)和文件名稱。Gcc編譯器的調(diào)用參數(shù)大約有100多個,其中多數(shù)參數(shù)我們可能根本就用不到,這里只介紹其中最基本、最常用的參數(shù)
發(fā)表于 08-20 09:57
?1288次閱讀
gcc的編譯選項總結(jié)
本文用于記錄我在學(xué)習(xí)和工作中遇到的各種GCC選項,雖然這些選項可以在GNU的手冊上查到,不過這里做個總結(jié),可以避免每次都去查手冊,算是一個備忘吧。本文的內(nèi)容會不斷更新擴(kuò)充。
tcpdump常用的選項參數(shù)詳細(xì)總結(jié)
常用選項通過上述的實戰(zhàn)案例,相信大家已經(jīng)掌握的 tcpdump 基本用法,在這里來詳細(xì)總結(jié)一下常用的選項參數(shù)。 (
認(rèn)識一下幾個常用的門級電路
標(biāo)準(zhǔn)單元庫是數(shù)字集成電路的積木,是復(fù)雜電路和系統(tǒng)的基礎(chǔ)。今天我們來認(rèn)識一下其中的幾個常用門級電路。
盤點一下高通CES 2024汽車創(chuàng)新技術(shù)
在CES2024上,我們看到英特爾和AMD加入,加上原來的英偉達(dá),高通需要和這些跨行的對手在一個賽道卷,目前高通在數(shù)字座艙、云連接、人工智能和自動駕駛領(lǐng)域是有一定的積累的,我們來盤點
評論