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