GCC
- 預處理(
.c/.cpp
)、編譯()、彙編、鏈接
使用動態鏈接庫
- 生成.o文件:
arm-linux-gnueabihf-gcc -c -o sub.o sub.c
- 生成動態鏈接庫:
arm-linux-gnueabihf-gcc -shared -o libsub.so sub.o
- 使用動態鏈接庫生成可執行文件:
arm-linux-gnueabihf-gcc -o test main.o -lsub -L ./
- 注意
-l
和sub
之間沒有空格 - sub庫並沒有位於工具鏈的lib目錄,所以我們需要指定目錄,
-L ./
指定庫所在的目錄爲當前目錄
- 注意
- 注意:使用動態鏈接庫交叉編譯生成的可執行程序,傳輸到板子上時,需要把動態鏈接庫
libusb.so
放到板子對應的/lib
目錄- 如果不放到板子對應的/lib目錄,則需要重新運行以下程序(放到
/a
目錄爲例)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a
然後運行./test
- 如果不放到板子對應的/lib目錄,則需要重新運行以下程序(放到
使用靜態鏈接庫
- 生成.o文件:
arm-linux-gnueabihf-gcc -c -o sub.o sub.c
- 生成靜態鏈接庫:
ar crs libsub.a sub.o
(可以使用多個.o生成靜態庫) - 使用靜態鏈接庫生成可執行文件
rm-linux-gnueabihf-gcc -o test main.o libsub.a
(如果.a不在當`前目錄下,需要指定它的絕對或相對路徑) - 注意:靜態鏈接庫不需要放到板子上!!!
GCC編譯一些很有用的選項
gcc -E main.c
// 查看預處理結果,比如頭文件是哪個gcc -E -dM main.c > 1.txt
// 把所有的宏展開,存在1.txt裏gcc -Wp,-MD,abc.dep -c -o main.o main.c
// 生成依賴文件abc.dep,後面Makefile會用