抽空學習了Linux GCC,以前都是搞visual c++和java開發,很少關注這塊,只聽說過make,cmake...
小布老師視頻:https://www.bilibili.com/video/av82377250?p=5
編譯過程:
步驟1:預處理(處理宏) Preprocessing(to expand macros)
步驟2:編譯(源程序生成彙編語言) Complication(from source code to assembly)
步驟3:Assembly(彙編語言 到機器碼) Assembly(from assembly language to machine code)
步驟4:鏈接(生成可執行文件) Linking(to create the final executable)
GCC編譯Hello world
gcc -Wall hello.c main.c -o hello.o
參數說明:
-Wall: 使用標準的警告
-o: 目標文件輸出
-v 打印詳細信息
-c 只編譯生成目標文件,即不鏈接 gcc -Wall -c main.c
-L 包含鏈接庫文件路徑
-I 指定頭文件路徑
-l 指定鏈接哪些庫文件
-std指定C語言標準,如-std=c99
-D 宏定義。 對應indef宏定義,預處理使用
-E 只做預處理,不編譯
-g 保存debug信息
-OLEVEL gcc編譯優化等級0-3 等級越高會影響後續調試 建議平時用O0,發佈時用O2
C_INCLUDE_PATH CPLUS_INCLUDE_PATH
LIBRARY_PATH 靜態庫路徑
LD_LIBRARY_PATH 動態庫路徑
創建Library
告警設置:
輔助命令:
ldd : 查看當前文件依賴哪些動態庫
file : 查看當前文件的類型
其他的一些工具,沒記錄了,很難用上,以後用了在看吧