gcc編譯及鏈接階段
- Pre-Processing:
gcc -E test1.c -o test1.i
完成源代碼的預處理(可以生成可以讀懂的C語言代碼)
- Compling:
gcc -S test1.i -o test1.s
完成預處理后的代碼 到 匯編語言的轉換(生成匯編語言贴唇,與機器有關)
- Assembling:
gcc -c test1.s -o test1.o
完成匯編代碼到機器代碼的轉換(本地目標代碼)
- Linking:
gcc test1.o -o test1.out
完成目標代碼的系統(tǒng)及用戶調用的地址連接
GCC對頭文件的使用
頭文件的查找方式
1. GCC會在編譯時舰绘,查找/usr/[local]include(頭文件)堰氓,/usr/[local]lib(庫)
2. 在代碼中使用:#include “頭文件的相對路徑”瑰步,直接查找到頭文件
3. 使用gcc -I[目錄] 指定“附加的”頭文件所在路徑砸琅,此時在源代碼中使用 #include <頭文件名>
庫文件的鏈接方法:
- 默認:gcc 源文件 (直接從/usr/lib中查找)
- 指定:gcc 源文件 [庫文件的路徑] (附加自己的庫)虱颗,如:gcc main.c ./lib/libmath.a(注意.a是歸檔文件晶伦,可以是編譯后的文件改名字得到而芥,也可以用ar命令建立)
- 參數(shù)化指定:gcc 源文件 -L [庫目錄的路徑] -l[庫名] (庫名的規(guī)則:lib[庫名].a),如:gcc main.c -L ./lib -lmath,代表./lib/libmath.a文件
ar建立歸檔文件的方法(靜態(tài)庫):
- ar crv 歸檔文件 目標文件列表
- ar crv libmath.a sum.o multi.o
mac下“共享庫”的建立過程
- gcc a.o b.o -dynamiclib -o libx.dylib (打包成為“共享庫”)
- sudo cp libx.dylib /usr/local/lib/(copy到共享庫的位置中)
- gcc main.c -L./lib/ -lx (編譯并鏈接共享庫)
Linux下“共享庫建立方法”
- gcc a.o b.o -shared -o libx.so (打包成為“共享庫”)
- export export LD_LIBRARY_PATH=/home/john/lib/:$LD_LIBRARY_PATH (指定位置)
- gcc main.c -L./lib/ -lx(編譯并鏈接共享庫)