linux的gcc命令(linux的gcc)
linux gcc編譯好C文件后生成.o目標文件,但是在執行中($./test)出現沒有那個文件或目錄,請大神幫忙?
.o文件是不能被執行的, c的源碼要經過編譯和鏈接才能生成可執行文件,你只是編譯了,沒有鏈接,這個文件相當于Windows下的test.obj而已。gcc -Wall test.c -o test
Linux的gcc是怎么用的?
在終端中輸入 gcc 文件名 -o 目標文件名然后 ./目標文件名 就行了,沒有目標文件名,自動存為 a執行 ./a 就行了。在使用Gcc編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,其中多數參數我們可能根本就用不到,這里只介紹其中最基本、最常用的參數。 GCC最基本的用法是∶gcc 其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。 -c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標文件,通常用于編譯不包含主程序的子程序文件。 -o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。 -g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。 -O,對程序進行優化編譯、連接,采用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。 -O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢。 -Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數。C程序中的頭文件包含兩種情況∶ A)#include <myinc.h> B)#include “myinc.h” 其中,A類使用尖括號(< >),B類使用雙引號(“ ”)。對于A類,預處理程序cpp在系統預設包含文件目錄(如/usr/include)中搜尋相應的文件,而B類,預處理程序在目標文件的文件夾內搜索相應文件。 GCC執行過程示例 示例代碼 a.c: #include <stdio.h> int main() { printf("hellon"); } 預編譯過程: 這個過程處理宏定義和include,并做語法檢查。 可以看到預編譯后,代碼從5行擴展到了910行。 gcc -E a.c -o a.i cat a.c | wc -l 5 cat a.i | wc -l 910 編譯過程: 這個階段,生成匯編代碼。 gcc -S a.i -o a.s cat a.s | wc -l 59 匯編過程: 這個階段,生成目標代碼。 此過程生成ELF格式的目標代碼。 gcc -c a.s -o a.o file a.o a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped 鏈接過程: 鏈接過程。生成可執行代碼。鏈接分為兩種,一種是靜態鏈接,另外一種是動態鏈接。使用靜態鏈接的好處是,依賴的動態鏈接庫較少,對動態鏈接庫的版本不會很敏感,具有較好的兼容性;缺點是生成的程序比較大。使用動態鏈接的好處是,生成的程序比較小,占用較少的內存。 gcc a.o -o a 程序運行: ./a hello編輯本段GCC編譯簡單例子 編寫如下代碼: #include <stdio.h> int main() { printf("hello,world!n"); } 執行情況如下: gcc -E hello.c -o hello.i gcc -S hello.i -o hello.s gcc -c hello.s -o hello.o gcc hello.c -o hello ./hello hello,world!
Linux下gcc編譯提示錯誤。在函數_start中main未定義的引用?
你是不是在編譯靜態庫或者動態庫?也就是沒有main函數。
如果是,再參考一下下邊的提示。-c 參數表示將源文件編譯成object(目標文件)。即 gcc -c foo.c 會編譯成 foo.o gcc 不加參數時會編譯且嘗試鏈接成可執行文件,然而 foo.c 的代碼中沒有main函數的定義,所以最終無法成功鏈接,故報錯。
在linux中,怎么用gcc編譯文件?
編譯方法:格式 gcc 常用的選項最簡單的是:gcc hello.c默認的情況下將生成a.out的可執行性文件,只需要在終端上輸入./a.out就可以看到執行的結果,如果你想指定生成目標文件的名字那么你可以加上 -o選項,命令如下:gcc -o hello hello.c命令:gcc -c hello hello.c
擴展資料:
gcc命令的基本用法gcc 其中,filenames為文件名;options為編譯選項。當不使用任何編譯選項編譯hello.c時,gcc將會自動編譯產生一個a.out的可執行文件:# ls hello.c # gcc hello.c # ls a.out hello.c 執行:# ./a.out Hello, World! 使用-o編譯選擇,可以為編譯后的文件指定一個名字:# ls a.out hello.c # gcc hello.c -o hello # ls a.out hello hello.c 執行:# ./hello Hello, World! 注意:使用-o選項時,-o后面必須跟一個文件名,即:-o outfile。為了便于描述后面的選項,刪除hello和a.out可執行文件。
arm-linux-gcc-3.4.5-glibc-2.3.6是什么意思?
是一個交叉編譯軟件。為什么必須要安裝呢?
因為我們編寫C語言是在我們自己的PC上linux操作系統下利用GCC編寫的,而我們的應用程序最終是要裝載到ARM芯片上,所以這中間需要轉換。就用的arm-linux-gcc來編譯生成目標文件。
如果只是用gcc雖然在個人PC編譯正確,但是下載到目標芯片卻是錯誤的,原因就在運行的環境不一樣。
總結
以上是生活随笔為你收集整理的linux的gcc命令(linux的gcc)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工厂模式浅析
- 下一篇: 安卓辅助功能在哪打开(安卓 辅助功能)