adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
一、gcc編譯過程
gcc -E hello.c -o hello.s //預處理gcc -S hello.s -o hello.i //編譯
gcc -c hello.i -o hello.o //匯編
gcc hello.o -o hello //鏈接
1)預處理,C編譯器對各種預處理命令進行處理,包括文件包含、宏定義的擴展、條件編譯的選擇等;
2)編譯,將預處理得到的源代碼文件,經過“翻譯轉換”,產生機器程序,得到機器語言的匯編文件;
3)匯編,將匯編代碼翻譯成機器碼,但是還不能運行;
4)鏈接,處理可重定向文件,把各種符號引用和符號定義轉換成為可執行文件中的合適信息,通常是虛擬地址。
二、gcc常用命令參數
1、gdb調試 -g
gcc test.c -o test -g //生成的test可以使用gdb命令進行調試2、指定所使用到的函數庫 -l(小寫l);指定函數庫所在的文件夾 -L;指定頭文件所在的文件夾 -I(大寫i);
gcc test.c -L/path/lib -lxxx -I/path/include //使用順序不分先后3、編譯優化
gcc -O test.c //編譯器對代碼自動優化編譯,默認不優化gcc -o1 test.c //設置優化級別為1;一般選擇2,3會有很多bug風險
4、設置警告為錯誤
gcc -Werror test.c -o test5、將所有警告信息全開
gcc -Wall test.c6、編譯時設置宏
gcc test.c -o test -DTRUE //相等于在代碼第一行定義 #define TRUE 1gcc test.c -o test -Dmacro=string //代碼第一行定義 #define macro string
7、gcc編譯標準
gcc test.c -o test //默認gcc test.c -o test -std=gun89
GCC -std編譯標準一覽表?c.biancheng.net三、靜態庫和動態庫
一、靜態鏈接庫搜索路徑順序:
LIBRARY_PATH和LD_LIBRARY_PATH區別與使用:
- 開發時,設置LIBRARY_PATH,以便gcc能夠找到編譯時需要的動態鏈接庫。
- 發布時,設置LD_LIBRARY_PATH,以便程序加載運行時能夠自動找到需要的動態鏈接庫。
二、動態鏈接時、執行時搜索路徑順序:
1)ld.so動態共享庫搜索順序
2)與動態庫鏈接相關的命令
- ld是gcc的鏈接程序;
- ldd是查看可執行文件中所依賴的庫,eg:ldd a.out;
- ldconfig用來更新/etc/ld.so.conf文件;
- nm查看.so庫中的函數名字,標記是T的就是動態庫里面生成的名字;eg:nm -C test|grep static //在程序文本段查找static
3)動態庫搜索路徑順序
4)動態庫路徑設置方法
ldconfig作用是在ld.so.conf和默認路徑(/lib/、/usr/lib/)中所列出目錄下搜索動態庫;
編譯時,ld鏈接器指定鏈接什么庫,編譯程序的最后一步是運行ld;
程序運行時,ld.so動態連接器,根據指定的路徑加載庫;
緩存文件/etc/ld.so.cahche,保存已經排好序的動態鏈接庫名字列表;
總結
以上是生活随笔為你收集整理的adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真正的创作者是谁?现有法律解决不了 AI
- 下一篇: 脉脉:算法⼯程师月薪6.7万 领跑新能源