gcc 常用命令和引數
.h //C/C++標頭檔案
.c //C的原始檔
.cc //C++ 的原始檔
.cpp //C++ 的原始檔
.cxx //C++ 的原始檔
.i //gcc 編譯的過程檔案 使用 -save-temps 即可以保留過編譯過程檔案,用於分析編譯過程
.s //彙編檔案,gcc 編譯的過程檔案 使用 -save-temps 即可以保留過編譯過程檔案,用於分析編譯過程
.a //LINUX 下的靜態檔案在WINDOWS下為".lib"
.o //.obj檔案 多個時,連線順序從左到右搜尋,gcc對同類型的檔案連線時不區分順序,GCC在連線時不同型別,需要區分順序,遵守從左到右的順序。
.so //share object ,動態庫檔案,在WINDOW下為"DLL"
檔案編譯順序:
.c檔案編譯產生對應的.o檔案,.o檔案可以產生.a或.so檔案。
eg:
gcc -c xxx.c //產生xxx.o
對ar命令可以產生.a檔案
ar cr libxxx.a xxx.o
如果有多個.o來生成.a可以在後面空格隔開追回更多檔案。
ar t libname.a
檢視有多少個.o來生成的.a檔案
gcc -shared -fpic xxx.o yyyy.o -o liblastfile.so
GCC編譯時警告開關
-Wall //是警告的集合,詳細包括:
-Wcomment(註釋是否巢狀)
-Wformat(printf,scanf格式)
-Wunused(沒有使用的變數)
-Wimplicit(沒有實現)
-Wreturn-type(沒有返回值)
eg:
gcc -Wall -c xxx.c
-o (小寫)//output 指定輸出檔名。
eg:
gcc -Wall -c xxx.c -o yyy
-v (小寫)//Verbose 列印詳細編譯資訊
eg:
gcc -v -Wall hello.c
-save-temps 把編譯歷史儲存下來,供分析,產生.i,.s檔案
eg:
gcc -Wall -save-temps xxxx.c
-I //用於連線標頭檔案路徑 讀"哎"
eg:
gcc -Wall xxx.c -Iinclude -Llib //在xxx.c目錄下有一個include放有xxx.h標頭檔案,在lib資料夾下放庫檔案如.a
-L //(連線庫路徑) 用於對指定的路庫路徑進行搜尋 最常見的是 "-L."其中的"."表示在當前目錄
eg:
gcc -Wall xxx.c -Iinclude -Llib
-l //連結link 用於對庫檔案的連結,常見的庫為libNAME.a 或libNAME.so,用於連線時,-lNAME
eg:
gcc xxx.o -lm -o out
-D 定義或使用巨集-DNAME 或 -DNAME=VALUE
eg:
如原始檔中用到一個巨集為DF,但又沒有宣告哪麼在使用的時候如果沒有指定巨集就會報錯哪麼可以使用這個-D來進行編譯時宣告
gcc -Wall -c -DDF xxx.c 或gcc -Wall -c -DDF="abc" xxxx.c
-E 檢視預處理過程
-O 優化開關 級別有0-3
eg:
gcc -Wall -c -O2 xxx.c
更多命令檢視gcc --help
其它Linux指令:
在Bash shell的命令列互動中可以輸入很多命令執行。例如:
命令 |
說明 |
命令 |
說明 |
|
touch |
新建檔案 |
cmd |
切換到windows控制檯,可以執行windows程式 |
|
rm |
刪除檔案 |
--help |
引數,顯示命令幫助 |
|
mkdir |
新建目錄 |
man |
顯示命令幫助 |
|
rmdir |
刪除目錄 |
info |
顯示命令更詳細幫助 |
|
ls |
顯示檔案和目錄 |
ps |
顯示程序 |
|
cd |
改當前目錄 cd / |
echo |
輸出變數值,echo $PATH |
|
cp |
複製檔案 |
find |
查詢檔案 |
|
mv |
移動檔案 |
diff |
比較檔案差異 |
|
檢視命令幫助文件時,按 Ctrl+Z 或 Ctrl+C 退出命令 |
cat 指令:用於檢視檔案
eg:
cat -n xxx.c 其中-n 用來顯示行號
ldd 指令:用於檢視可執行檔案有哪些動態庫依賴。
eg:
ldd xxxx
which 指令:用於檢視指令本身所在庫的目錄
eg:
which gcc
顯示 /usr/bin/gcc
ll指令:列出檔案列表
eg:
ll /usr/lib/*.a 列出檔案
pwd: 顯示當前所在目錄
當出現亂碼時可以指定顯示的語言
export LANG = C
evn 指令:顯示當前使用者的環境變數
eg:
evn | grep LIB //檢視LIB開頭的環境變數
su指令:
su 就是換到超級管理員操作
su- 就是指定切換到某個使用者
cpp 指令:
cpp -dM /dev/null 檢視巨集
cpp 預處理
time 指令: 檢視執行時間
eg:
time xxxx 其中xxxx為可執行程式名
GCC 編譯時連線第三方標頭檔案或庫檔案時指定搜尋路徑
經常在編譯時產生ld:cannot fine xxx。或沒有找到檔案,大多情況下是因為沒有正確找到庫或標頭檔案所致。
一、系統默路徑搜尋法。
//系統預設標頭檔案
/usr/local/include/
/usr/include/
系統預設庫檔案
/usr/local/lib/
/usr/lib/
上面這幾個是安裝好之後預設的標頭檔案和庫檔案路徑。裡面放的是系統需要的標頭檔案和庫檔案,如果我們使用第三方庫時,也所以把第三方的庫檔案和標頭檔案考過來,但這樣做,日積月累就會有很多第三方的垃圾庫。為了保證乾淨,使用環境變數和-I及-L引數進行動態設定。
二、環境變數法。
環境變數:可以檢視(.bash_profile檔案)
下面幾個是常使用的命名環境變數(當然可以按個人習慣來命名)
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
LIBRARY_PATH
LD_LIBRARY_PATH
可以設定多個環境變數,每個環境變數之間用“:”號隔開,如:
export DIR1:DIR2:...
注意在指定環境變數時,儘量以追回的方式,以免覆蓋了別人的值。
eg:
export LIBRARY_PATH=/home/xxx //不推薦,因為這樣有可能把這個變數從些就設定為/home/xxx
export LIBRARY_PATH=/home/xxx:$LIBRARY_PATH //推薦,因為這樣可以在原有值的基礎上進行新增。
三、使用-I(大寫的哎)和-L
-I表示include的第一個字母,即搜尋標頭檔案(通常標頭檔案都是include的,所以放在include資料夾下)
-L即(library)的第一個字母,即查詢庫檔案,後面跟的是庫的路徑。
最後,GCC可以編譯C/C++檔案,但如果是C++的請使用G++進行編譯,另外,不要用GCC編譯用G++進行檔案的連結,或G++編譯使用GCC進行檔案的連結,因為連結時找的執行時庫不一樣,所以很多情況下,找不到相應的庫的標頭檔案。
相關推薦
gcc 常用命令和引數
.h //C/C++標頭檔案 .c //C的原始檔 .cc //C++ 的原始檔 .cpp //C++ 的原始檔 .cxx //C++ 的原始檔 .i //gcc 編譯的過程檔
Linux系統GCC常用命令和GCC編譯過程描述
前言: GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴充套件,變得可處理 C++。後來又 擴充套件能夠支援更多程式語言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各類處理器架構上的組合語言等,所以改
Docker Windows下安裝的一些注意以及常用命令和引數
Windows下的安裝注意: 選擇完整安裝,其中MSYS-git UNIX tools是在Windows下執行Linux命令的工具 選擇Reboot Windows at end of ins
大資料(二十七):Sqoop常用命令和公用引數
一、常用命令列舉 命令 類 說明 import ImportTool 將資料匯入到叢集 export ExportTool
Linux新增或者刪除使用者和使用者組時常用的一些命令和引數
1、建使用者: 檢視:ls /home useradd xiongda passwd xiongda 2、建工作組 groupadd xiongchumo
Linux GCC常用命令 與 gcc 編譯器常用的命令列引數一覽
轉載自:http://www.cnblogs.com/sunyubo/archive/2011/09/06/2282054.html 這些常用的 gcc/g++ 命令列引數,你都知道麼? 1. gcc -E source_file.c-E,只執行到預編譯。直接輸出預編譯結果
Linux GCC常用命令
靜態加載 配置文件 情況 窗口 連接器 執行 二進制 c 語言 標準輸入輸出 Linux GCC常用命令 1簡介 2簡單編譯 2.1預處理 2.2編譯為匯編代碼(Compilation) 2.3匯編(Assembly) 2.4連接(Linking) 3
python常用命令和基礎運算符
長度 sci amp 文件編碼 標題 整體 整數 計算 是否為空 基礎運算符 http://www.cnblogs.com/alex3714/articles/5465198.html 身份運算符:is is not成員運算符:in not in ##in 判斷元素是否存
gcc常用命令
lin href 支持 可執行文件 編譯預處理 操作 執行文件 多源 -o2 gcc命令使用GNU推出的基於C/C++的編譯器,是開放源代碼領域應用最廣泛的編譯器,具有功能強大,編譯代碼支持性能優化等特點。現在很多程序員都應用GCC,怎樣才能更好的應用GCC。目前,GCC
linux下終端11選5平臺出租常用命令和vi命令修改文件及保存的使用方法
首開 mman bin 軟件包管理 系統啟動 左右移動 包含 地方 執行 首先11選5平臺出租 haozbbs.com Q1446595067介紹一下Ubuntu下各個目錄的一般作用: /這就是根目錄,一臺電腦有且只有一個根目錄,所有的文件都是從這裏開始的。舉個例子:當
Linux常用命令和vim的使用
系統 ctrl+v ctrl+ 環境的使用 新增 常用 linu 命令模式 多行 一、Linux常用命令 - 已學 cd (路徑的切換) rm(後接-rf 可刪除文件或文件夾) ls(查看當前路徑下的文件和文件夾) mkdir(創建文件夾) touch(創建文件)
Linux常用命令和常見問題
secure 格式 tmp目錄 prompt nat mys 常見問題 -c 文檔 常用命令 查看系統信息 Linux版本uname -a 查看系統內核信息lsb_release -a 查看LSB(L
linux常用命令和快捷鍵
inux linux常用命令 創建 lin 返回 ont 搜索 權限 文本 命令 解壓縮(tar zxf 壓縮包名) 創建文件(mkdir 文件名)權限文件(sudo mkdir 文件名) 編輯退出(vim/vi 名字--點擊i編輯--返回--冒號--qw--回車)
alembic常用命令和經典錯誤解決辦法
經典 bsp ima 分享 技術分享 nbsp 技術 經典錯誤 bic alembic常用命令和經典錯誤解決辦法
Linux常用命令和Shell程式設計基礎
目錄相關 cd - .與.. 分別表示當前目錄和父目錄 - ~與$HOME 都是指當前使用者的主目錄 - cd – 切換到上一次所在的目錄(不一定是父目錄) pwd - pwd 顯示當前目錄 - $PWD與$OLDPWD 兩個變量表示當前目錄和上一次所在的目錄 ls - ls -rtl 檢視
Shell(二)常用命令和技巧
命令列一些技巧: * 表示任意字元(也可以無字元) ? 任意一個單字元 [a-z] 包含一個字元範圍中的任一字元 [^a-z] 不包含此範圍的字元 Tab鍵 補齊命令名稱或其他名稱 history 重新輸入以前執行過的指令 !+序號
Xcode 除錯技巧 --常用命令和斷點
Xcode 中的除錯技巧與我們的日常開發息息相關,而這些除錯技巧在我們解決Bug時,常常有事半功倍的作用,經常會用到的有各種斷點 和 命令。而這些除錯技巧也經常會在面試中問到,所以不知道的就來看看吧。 除錯命令 在上圖中,右側綠色區域就是Log 輸出區,在 Log 輸出區可以使用一些命令,來輔助除錯。 那
WIndows 系統下的常用命令 和 檢測方法
一、檢測硬碟速度(Windows 自帶工具) 使用windows 系統自帶的工具測試硬碟讀寫速度 在使用下面命令前,需要獲得管理員許可權,才會在Dos視窗上顯示(否則,一閃而過) winsat disk -drive + 磁碟符(c、e、f) 二、常見的windows自帶工具/命令
redis之四 常用命令和5種資料結構
redis中文官網:string hash list set sortedset 一、基本操作 #獲取所有的key keys * #判斷一個鍵是否存在。存在則返回1,否則返回0 exists mykey #刪除鍵 del mykey #過期時間(單位:秒) #設定過期時間
MYSQL的常用命令和增刪改查語句和資料型別
連線命令:mysql -h[主機地址] -u[使用者名稱] -p[使用者密碼] 建立資料庫:create database [庫名] 顯示所有資料庫: show databases; 開啟資料庫:use [庫名] 當前選擇的庫狀態:SELECT DATABASE(); 建立資料表:CRE