日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Linux動(dòng)靜態(tài)庫(kù)制作與使用全解析:從編譯鏈接到動(dòng)態(tài)加載原理

Linux動(dòng)靜態(tài)庫(kù)制作與使用全解析:從編譯鏈接到動(dòng)態(tài)加載原理 做 Linux 系統(tǒng)開(kāi)發(fā)這些年我發(fā)現(xiàn)一個(gè)挺有意思的現(xiàn)象很多人寫了三五年業(yè)務(wù)代碼編譯鏈接這塊一直是“黑盒”——gcc main.c -o main一把梭能跑就行。直到某天遇到undefined reference to、cannot open shared object file、或者程序體積莫名其妙膨脹到幾十兆才開(kāi)始回頭補(bǔ)這一課。動(dòng)靜態(tài)庫(kù)的制作與使用恰恰是打通“源碼到可執(zhí)行程序”這條鏈路上最關(guān)鍵的一環(huán)也是理解動(dòng)態(tài)鏈接原理的入口。這篇內(nèi)容我打算把靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù)從制作到使用的完整流程拆開(kāi)講透順帶把動(dòng)態(tài)庫(kù)加載的底層機(jī)制、符號(hào)解析、版本管理這些容易被跳過(guò)的東西補(bǔ)上。適合已經(jīng)會(huì)寫 C 代碼、能看懂基本 Makefile、但對(duì)鏈接過(guò)程一知半解的同學(xué)也適合想搞清楚“為什么我的程序換個(gè)機(jī)器就跑不起來(lái)”的運(yùn)維和嵌入式方向的朋友。全文會(huì)給出可直接復(fù)現(xiàn)的命令和代碼參數(shù)選擇我會(huì)解釋清楚背后的理由踩過(guò)的坑也會(huì)一并列出來(lái)。1. 先搞清楚靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)到底差在哪在動(dòng)手之前得先把這兩個(gè)概念的本質(zhì)區(qū)別說(shuō)清楚不然后面很多操作你會(huì)覺(jué)得“為什么要這么麻煩”。我用一個(gè)生活化的類比靜態(tài)庫(kù)像是把工具箱里的每件工具都焊死在你自己的車上車開(kāi)到哪工具跟到哪別人借不走也改不了動(dòng)態(tài)庫(kù)像是公共倉(cāng)庫(kù)你的車只留一個(gè)取貨憑證真正要用的時(shí)候去倉(cāng)庫(kù)拿倉(cāng)庫(kù)更新了工具你的車下次取貨自動(dòng)用上新的。1.1 從鏈接時(shí)機(jī)看本質(zhì)差異靜態(tài)庫(kù).aArchive在鏈接階段就被完整地拷貝進(jìn)最終的可執(zhí)行文件。鏈接器ld會(huì)從歸檔文件里挑出被引用到的目標(biāo)文件.o把它們合并進(jìn)輸出。這意味著程序運(yùn)行時(shí)不依賴外部庫(kù)文件但也意味著每個(gè)使用該庫(kù)的程序都有一份獨(dú)立副本磁盤和內(nèi)存都有冗余。動(dòng)態(tài)庫(kù).soShared Object在鏈接階段只做符號(hào)引用登記真正的代碼段在程序啟動(dòng)或首次調(diào)用時(shí)才由動(dòng)態(tài)鏈接器加載到內(nèi)存。多個(gè)進(jìn)程可以共享同一份物理內(nèi)存中的庫(kù)代碼代碼段只讀天然可共享這也是“共享庫(kù)”這個(gè)名字的由來(lái)。這里有個(gè)細(xì)節(jié)很多人忽略靜態(tài)庫(kù)的鏈接單位是目標(biāo)文件不是函數(shù)。你只調(diào)用了一個(gè)函數(shù)鏈接器會(huì)把包含這個(gè)函數(shù)的整個(gè).o都拉進(jìn)來(lái)。所以靜態(tài)庫(kù)的“按需鏈接”粒度其實(shí)比較粗這也是為什么有時(shí)候只用一個(gè)函數(shù)程序體積卻漲了不少。1.2 一張表看清選型依據(jù)對(duì)比維度靜態(tài)庫(kù).a動(dòng)態(tài)庫(kù).so鏈接時(shí)機(jī)編譯鏈接期完整拷貝運(yùn)行期加載可執(zhí)行文件體積大小運(yùn)行時(shí)依賴無(wú)需要庫(kù)文件存在內(nèi)存占用每進(jìn)程獨(dú)立代碼段可共享庫(kù)更新需重新鏈接程序替換.so即可生效部署便利性單文件即可分發(fā)需保證庫(kù)路徑正確啟動(dòng)速度略快無(wú)加載開(kāi)銷略慢需符號(hào)重定位適用場(chǎng)景嵌入式、單文件分發(fā)、對(duì)啟動(dòng)敏感通用軟件、多程序共用、需熱更新選型上沒(méi)有絕對(duì)優(yōu)劣。我個(gè)人的經(jīng)驗(yàn)是面向終端用戶分發(fā)的閉源工具、或者跑在資源受限設(shè)備上的程序靜態(tài)鏈接省心而系統(tǒng)級(jí)服務(wù)、多個(gè)程序共用的基礎(chǔ)組件動(dòng)態(tài)庫(kù)更合適?;旌鲜褂靡埠艹R?jiàn)——核心邏輯靜態(tài)鏈接保證穩(wěn)定外圍插件用動(dòng)態(tài)庫(kù)實(shí)現(xiàn)擴(kuò)展。1.3 命名規(guī)范不是隨便定的Linux 下庫(kù)文件命名有約定俗成的規(guī)則理解它能幫你少走彎路。靜態(tài)庫(kù)固定是lib 庫(kù)名 .a動(dòng)態(tài)庫(kù)是lib 庫(kù)名 .so 版本號(hào)。比如庫(kù)名叫mymath那文件就是libmymath.a和libmymath.so。鏈接時(shí)用-l參數(shù)只需寫庫(kù)名去掉lib前綴和擴(kuò)展名比如-lmymath鏈接器會(huì)自動(dòng)去找libmymath.a或libmymath.so。動(dòng)態(tài)庫(kù)的版本號(hào)還有講究通常有三段libmymath.so.1.2.3分別對(duì)應(yīng)主版本號(hào)不兼容變更、次版本號(hào)新增接口、修訂號(hào)bug 修復(fù)。實(shí)際部署時(shí)會(huì)有l(wèi)ibmymath.so.1這樣的軟鏈接指向具體版本程序鏈接時(shí)記錄的是SONAME通常是libmymath.so.1這樣小版本升級(jí)不影響已有程序。這套機(jī)制后面講動(dòng)態(tài)庫(kù)原理時(shí)還會(huì)展開(kāi)。2. 靜態(tài)庫(kù)制作從目標(biāo)文件到歸檔靜態(tài)庫(kù)的制作流程其實(shí)很樸素先把源文件編譯成目標(biāo)文件再用歸檔工具打包。但每一步的參數(shù)選擇都有講究我按實(shí)際操作順序走一遍。2.1 編譯目標(biāo)文件的關(guān)鍵參數(shù)假設(shè)我們有一個(gè)簡(jiǎn)單的數(shù)學(xué)工具庫(kù)包含兩個(gè)源文件add.c和sub.c頭文件mymath.h聲明接口。第一步是編譯成.ogcc -c -fPIC add.c -o add.o gcc -c -fPIC sub.c -o sub.o這里-c表示只編譯不鏈接輸出目標(biāo)文件。-fPIC是生成位置無(wú)關(guān)代碼靜態(tài)庫(kù)其實(shí)不強(qiáng)制要求但加上它有個(gè)好處同一批.o既能打靜態(tài)庫(kù)也能打動(dòng)態(tài)庫(kù)省得重復(fù)編譯。PIC 的代價(jià)是少量性能開(kāi)銷主要是通過(guò) GOT 間接尋址對(duì)絕大多數(shù)場(chǎng)景可以忽略。注意如果你的代碼要同時(shí)用于靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)務(wù)必統(tǒng)一加-fPIC。我見(jiàn)過(guò)有人靜態(tài)庫(kù)用非 PIC 編譯后來(lái)想復(fù)用這批.o做動(dòng)態(tài)庫(kù)結(jié)果鏈接報(bào)relocation R_X86_64_32 against ... can not be used when making a shared object只能全部重編。編譯時(shí)還可以加-O2優(yōu)化、-Wall開(kāi)警告這些和庫(kù)制作不沖突。但有個(gè)坑要提醒不要加-g之外的調(diào)試信息裁剪參數(shù)否則出問(wèn)題時(shí)沒(méi)法定位。生產(chǎn)庫(kù)可以strip掉符號(hào)表但那是打包最后一步的事編譯階段保留完整信息更穩(wěn)妥。2.2 用 ar 打包歸檔文件有了.o文件用ar命令打包ar rcs libmymath.a add.o sub.o三個(gè)參數(shù)含義r表示插入或替換成員c表示創(chuàng)建歸檔不存在時(shí)s表示生成索引symbol table。這個(gè)索引很關(guān)鍵鏈接器靠它快速查找符號(hào)在哪個(gè)成員里沒(méi)有索引會(huì)退化成線性掃描大庫(kù)鏈接會(huì)明顯變慢?,F(xiàn)代ar默認(rèn)可能已經(jīng)生成索引但顯式寫s更保險(xiǎn)。打包完可以用ar t libmymath.a查看成員列表用nm libmymath.a查看符號(hào)表。nm輸出里T表示代碼段定義的全局符號(hào)U表示未定義需要外部提供t是小寫表示局部符號(hào)。檢查符號(hào)表是個(gè)好習(xí)慣能提前發(fā)現(xiàn)“函數(shù)忘了實(shí)現(xiàn)”或者“不小心定義了同名符號(hào)”這類問(wèn)題。實(shí)操心得如果庫(kù)里有多個(gè).o且存在同名符號(hào)ar不會(huì)報(bào)錯(cuò)鏈接時(shí)可能悄悄用錯(cuò)版本。建議打包前用nm -A *.o | grep T 掃一遍確認(rèn)沒(méi)有重復(fù)的全局符號(hào)定義。2.3 靜態(tài)庫(kù)的目錄組織一個(gè)規(guī)范的庫(kù)交付物通常包含三部分頭文件目錄include/、庫(kù)文件目錄lib/、可選的文檔。我習(xí)慣這樣組織mymath/ ├── include/ │ └── mymath.h ├── lib/ │ └── libmymath.a └── src/ ├── add.c └── sub.c使用者拿到后編譯時(shí)用-I指定頭文件路徑-L指定庫(kù)路徑-l指定庫(kù)名gcc main.c -I./mymath/include -L./mymath/lib -lmymath -o main這里有個(gè)順序問(wèn)題必須強(qiáng)調(diào)-l參數(shù)要放在源文件之后。因?yàn)殒溄悠鲝淖蟮接姨幚磔斎胗龅絤ain.c時(shí)發(fā)現(xiàn)引用了add符號(hào)此時(shí)還沒(méi)看到-lmymath符號(hào)未解析等處理到-lmymath時(shí)才會(huì)去庫(kù)里找。如果順序反了鏈接器處理庫(kù)時(shí)還沒(méi)有任何未解析符號(hào)會(huì)直接跳過(guò)整個(gè)庫(kù)最后報(bào)undefined reference。這個(gè)坑幾乎每個(gè)新手都會(huì)踩一次。3. 動(dòng)態(tài)庫(kù)制作PIC、SONAME 與版本管理動(dòng)態(tài)庫(kù)的制作比靜態(tài)庫(kù)多幾個(gè)環(huán)節(jié)核心是位置無(wú)關(guān)代碼、共享鏈接、以及版本號(hào)管理。這幾步做不好后面運(yùn)行時(shí)會(huì)出各種詭異問(wèn)題。3.1 位置無(wú)關(guān)代碼為什么必須加動(dòng)態(tài)庫(kù)會(huì)被加載到進(jìn)程地址空間的任意位置具體地址每次運(yùn)行可能不同這是地址空間布局隨機(jī)化的一部分所以庫(kù)代碼不能使用絕對(duì)地址尋址。-fPIC讓編譯器生成通過(guò)全局偏移表GOT和過(guò)程鏈接表PLT間接訪問(wèn)的代碼這樣無(wú)論庫(kù)被加載到哪代碼都能正確工作。gcc -c -fPIC add.c -o add.o gcc -c -fPIC sub.c -o sub.o如果忘了加-fPIC直接鏈接動(dòng)態(tài)庫(kù)在 x86_64 上通常會(huì)報(bào)relocation R_X86_64_32S against ... can not be used when making a shared object; recompile with -fPIC。這個(gè)錯(cuò)誤信息很明確照著做就行。但有些架構(gòu)比如某些 32 位平臺(tái)可能不報(bào)錯(cuò)卻能鏈接成功運(yùn)行時(shí)才崩潰更難排查。所以養(yǎng)成習(xí)慣做動(dòng)態(tài)庫(kù)編譯階段就加-fPIC。3.2 鏈接成共享對(duì)象把.o鏈接成.sogcc -shared -fPIC add.o sub.o -o libmymath.so.1.0.0-shared告訴鏈接器生成共享對(duì)象而非可執(zhí)行文件。這里我直接帶了完整版本號(hào)1.0.0接下來(lái)要建立 SONAME 和軟鏈接。3.3 SONAME 與軟鏈接的配合SONAME 是嵌在動(dòng)態(tài)庫(kù)內(nèi)部的一個(gè)字段程序鏈接時(shí)會(huì)把 SONAME 記錄到自己的DT_NEEDED條目里運(yùn)行時(shí)動(dòng)態(tài)鏈接器就按這個(gè)名字去找?guī)?。設(shè)置 SONAME 用-Wl,-sonamegcc -shared -fPIC add.o sub.o -Wl,-soname,libmymath.so.1 -o libmymath.so.1.0.0然后建立軟鏈接ln -s libmymath.so.1.0.0 libmymath.so.1 ln -s libmymath.so.1 libmymath.so三個(gè)文件的關(guān)系libmymath.so.1.0.0是真實(shí)文件libmymath.so.1是 SONAME 對(duì)應(yīng)的鏈接運(yùn)行時(shí)找這個(gè)libmymath.so是開(kāi)發(fā)時(shí)鏈接用的-lmymath找這個(gè)。為什么要這么繞因?yàn)槌绦蜻\(yùn)行時(shí)只認(rèn) SONAME只要libmymath.so.1存在且指向正確的實(shí)現(xiàn)小版本升級(jí)比如換成1.0.1只需改軟鏈接指向已有程序無(wú)需重新編譯。這就是動(dòng)態(tài)庫(kù)“熱更新”能力的底層支撐??梢杂胷eadelf -d libmymath.so.1.0.0 | grep SONAME驗(yàn)證 SONAME 是否設(shè)置成功。如果輸出為空說(shuō)明沒(méi)設(shè)上運(yùn)行時(shí)可能找不到庫(kù)。3.4 動(dòng)態(tài)庫(kù)的鏈接與運(yùn)行路徑編譯使用動(dòng)態(tài)庫(kù)的程序gcc main.c -I./include -L./lib -lmymath -o main鏈接階段沒(méi)問(wèn)題但直接運(yùn)行./main很可能報(bào)error while loading shared libraries: libmymath.so.1: cannot open shared object file。原因是動(dòng)態(tài)鏈接器運(yùn)行時(shí)不知道去哪找這個(gè)庫(kù)。解決辦法有幾種把庫(kù)裝到系統(tǒng)默認(rèn)路徑如/usr/local/lib然后ldconfig刷新緩存設(shè)置環(huán)境變量LD_LIBRARY_PATH./lib臨時(shí)指定編譯時(shí)加-Wl,-rpath,$ORIGIN/lib把相對(duì)路徑寫進(jìn)程序$ORIGIN表示可執(zhí)行文件所在目錄。我一般推薦rpath方案因?yàn)樗岩蕾囮P(guān)系固化在程序里部署時(shí)不用依賴環(huán)境變量也不會(huì)污染系統(tǒng)庫(kù)路徑。$ORIGIN用單引號(hào)包住是為了防止 shell 提前展開(kāi)。驗(yàn)證可以用readelf -d main | grep -i path看 RUNPATH 是否寫入。注意LD_LIBRARY_PATH雖然方便但在生產(chǎn)環(huán)境慎用。它會(huì)改變整個(gè)進(jìn)程的庫(kù)搜索順序可能讓程序加載到非預(yù)期的庫(kù)版本引發(fā)難以復(fù)現(xiàn)的問(wèn)題。調(diào)試時(shí)臨時(shí)用可以正式部署優(yōu)先 rpath 或標(biāo)準(zhǔn)路徑安裝。4. 動(dòng)態(tài)庫(kù)加載原理從 execve 到符號(hào)重定位這部分是很多人覺(jué)得“玄”的地方其實(shí)拆開(kāi)看邏輯很清晰。我按程序啟動(dòng)的時(shí)間線走一遍把關(guān)鍵環(huán)節(jié)和涉及的數(shù)據(jù)結(jié)構(gòu)點(diǎn)出來(lái)。4.1 程序啟動(dòng)時(shí)的加載流程當(dāng)你執(zhí)行./main內(nèi)核的execve系統(tǒng)調(diào)用會(huì)讀取 ELF 文件頭發(fā)現(xiàn)是動(dòng)態(tài)鏈接的可執(zhí)行文件有PT_INTERP段于是先加載動(dòng)態(tài)鏈接器通常是/lib64/ld-linux-x86-64.so.2把控制權(quán)交給它。動(dòng)態(tài)鏈接器接著做幾件事加載可執(zhí)行文件本身、遍歷DT_NEEDED條目加載所有依賴的.so、執(zhí)行重定位、調(diào)用各庫(kù)的初始化函數(shù).init/.init_array最后跳轉(zhuǎn)到程序入口。DT_NEEDED里記錄的就是各依賴庫(kù)的 SONAME。可以用readelf -d main查看輸出里NEEDED行就是。動(dòng)態(tài)鏈接器按一定順序搜索這些庫(kù)先看DT_RPATH如果沒(méi)被DT_RUNPATH覆蓋再看LD_LIBRARY_PATH再看DT_RUNPATH最后是/etc/ld.so.cache和默認(rèn)路徑。這個(gè)搜索順序理解清楚排查“加載了錯(cuò)誤版本庫(kù)”的問(wèn)題就有方向了。4.2 符號(hào)重定位與 GOT/PLT 機(jī)制動(dòng)態(tài)庫(kù)的代碼在編譯時(shí)不知道自己和依賴庫(kù)會(huì)被加載到哪個(gè)地址所以對(duì)全局符號(hào)的訪問(wèn)不能寫死地址。解決方案是 GOTGlobal Offset Table和 PLTProcedure Linkage Table。數(shù)據(jù)符號(hào)通過(guò) GOT 訪問(wèn)代碼里寫的是“從 GOT 第 N 項(xiàng)取地址”GOT 表項(xiàng)在加載時(shí)由動(dòng)態(tài)鏈接器填上真實(shí)地址。函數(shù)調(diào)用通過(guò) PLT第一次調(diào)用某函數(shù)時(shí)PLT 跳轉(zhuǎn)到動(dòng)態(tài)鏈接器的解析例程解析出真實(shí)地址后填入 GOT后續(xù)調(diào)用直接走 GOT。這就是所謂的延遲綁定lazy binding好處是啟動(dòng)快——沒(méi)調(diào)用到的函數(shù)不用提前解析。延遲綁定可以用LD_BIND_NOW1環(huán)境變量關(guān)閉或者鏈接時(shí)加-Wl,-z,now強(qiáng)制立即綁定。立即綁定的好處是啟動(dòng)時(shí)就能發(fā)現(xiàn)符號(hào)缺失問(wèn)題而不是運(yùn)行到一半才崩代價(jià)是啟動(dòng)稍慢。安全敏感的場(chǎng)景比如需要完整 RELRO 保護(hù)通常用立即綁定。4.3 符號(hào)可見(jiàn)性控制默認(rèn)情況下動(dòng)態(tài)庫(kù)里的所有全局符號(hào)都對(duì)外可見(jiàn)。這帶來(lái)兩個(gè)問(wèn)題一是符號(hào)污染不同庫(kù)的同名符號(hào)可能沖突二是性能可見(jiàn)符號(hào)都要經(jīng)過(guò) PLT 間接調(diào)用。解決辦法是用可見(jiàn)性控制// 只導(dǎo)出需要的接口 __attribute__((visibility(default))) int mymath_add(int a, int b); // 內(nèi)部函數(shù)隱藏 __attribute__((visibility(hidden))) static int internal_helper(void);編譯時(shí)加-fvisibilityhidden把所有符號(hào)默認(rèn)設(shè)為隱藏再對(duì)需要導(dǎo)出的接口顯式標(biāo)default。這樣導(dǎo)出的符號(hào)表干凈加載更快也不容易和別的庫(kù)撞名。可以用nm -D libmymath.so查看動(dòng)態(tài)符號(hào)表確認(rèn)只導(dǎo)出了預(yù)期接口。實(shí)操心得做庫(kù)的時(shí)候養(yǎng)成“默認(rèn)隱藏、顯式導(dǎo)出”的習(xí)慣比事后用版本腳本version script收拾爛攤子省事得多。版本腳本雖然強(qiáng)大但維護(hù)成本高小項(xiàng)目沒(méi)必要上。5. 完整實(shí)操?gòu)牧銟?gòu)建一個(gè)可復(fù)現(xiàn)的庫(kù)項(xiàng)目光說(shuō)不練假把式這里給一套完整的、可直接復(fù)制運(yùn)行的流程。我用一個(gè)字符串處理庫(kù)做例子包含靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種產(chǎn)物。5.1 源碼與目錄結(jié)構(gòu)strutil/ ├── include/ │ └── strutil.h ├── src/ │ ├── str_reverse.c │ └── str_count.c └── Makefilestrutil.h#ifndef STRUTIL_H #define STRUTIL_H #ifdef __cplusplus extern C { #endif __attribute__((visibility(default))) void str_reverse(char *s); __attribute__((visibility(default))) int str_count_char(const char *s, char c); #ifdef __cplusplus } #endif #endifstr_reverse.c實(shí)現(xiàn)字符串反轉(zhuǎn)str_count.c實(shí)現(xiàn)字符計(jì)數(shù)都是簡(jiǎn)單邏輯重點(diǎn)在構(gòu)建流程。5.2 Makefile 的寫法與參數(shù)解釋CC gcc CFLAGS -Wall -O2 -fPIC -fvisibilityhidden -Iinclude LDFLAGS_SO -shared -Wl,-soname,libstrutil.so.1 SRCS src/str_reverse.c src/str_count.c OBJS $(SRCS:.c.o) all: libstrutil.a libstrutil.so.1.0.0 %.o: %.c $(CC) $(CFLAGS) -c $ -o $ libstrutil.a: $(OBJS) ar rcs $ $^ libstrutil.so.1.0.0: $(OBJS) $(CC) $(LDFLAGS_SO) $^ -o $ ln -sf libstrutil.so.1.0.0 libstrutil.so.1 ln -sf libstrutil.so.1 libstrutil.so clean: rm -f $(OBJS) libstrutil.a libstrutil.so* .PHONY: all clean幾個(gè)關(guān)鍵點(diǎn)-fPIC和-fvisibilityhidden在CFLAGS里統(tǒng)一加靜態(tài)庫(kù)動(dòng)態(tài)庫(kù)共用同一批.o-Wl,-soname通過(guò)-Wl把參數(shù)透?jìng)鹘o鏈接器軟鏈接用ln -sf保證重復(fù)執(zhí)行不報(bào)錯(cuò)。$^是自動(dòng)變量表示所有依賴文件$表示第一個(gè)依賴。5.3 測(cè)試程序與驗(yàn)證步驟寫個(gè)測(cè)試程序test.c#include stdio.h #include string.h #include strutil.h int main(void) { char buf[] hello; str_reverse(buf); printf(reversed: %s\n, buf); printf(count l: %d\n, str_count_char(hello, l)); return 0; }靜態(tài)鏈接測(cè)試make gcc test.c -Iinclude -L. -lstrutil -static -o test_static ./test_static注意-static會(huì)讓整個(gè)程序靜態(tài)鏈接包括 libc體積會(huì)很大。如果只想靜態(tài)鏈接我們的庫(kù)而動(dòng)態(tài)鏈接 libc可以顯式指定./libstrutil.a而不是-lstrutil或者用-Wl,-Bstatic -lstrutil -Wl,-Bdynamic切換。動(dòng)態(tài)鏈接測(cè)試gcc test.c -Iinclude -L. -lstrutil -Wl,-rpath,$ORIGIN -o test_dynamic ./test_dynamic用ldd test_dynamic查看依賴應(yīng)該能看到libstrutil.so.1 ./libstrutil.so.1。用readelf -d test_dynamic | grep -E NEEDED|RUNPATH確認(rèn) SONAME 和 rpath 都正確寫入。5.4 驗(yàn)證庫(kù)的獨(dú)立性與符號(hào)表檢查靜態(tài)庫(kù)符號(hào)nm libstrutil.a應(yīng)該看到T str_reverse和T str_count_char以及一些U開(kāi)頭的 libc 依賴比如strlen。檢查動(dòng)態(tài)庫(kù)導(dǎo)出符號(hào)nm -D libstrutil.so.1.0.0因?yàn)榧恿?fvisibilityhidden應(yīng)該只看到我們顯式標(biāo)了default的兩個(gè)函數(shù)加上一些鏈接器自動(dòng)生成的符號(hào)如_init、_fini。如果看到一堆內(nèi)部符號(hào)說(shuō)明可見(jiàn)性控制沒(méi)生效檢查頭文件里的 attribute 是否寫對(duì)。6. 常見(jiàn)問(wèn)題排查與避坑清單這部分是我這些年踩坑攢下來(lái)的按問(wèn)題現(xiàn)象分類方便對(duì)照排查。6.1 鏈接期問(wèn)題速查表現(xiàn)象可能原因解決方向undefined reference to xxx-l順序在源文件前庫(kù)沒(méi)包含該符號(hào)C/C 混編缺extern C調(diào)整參數(shù)順序nm查符號(hào)補(bǔ)extern Ccannot find -lxxx-L路徑不對(duì)庫(kù)文件名不符合libxxx.a/.so規(guī)范檢查路徑和文件名relocation R_X86_64_32 ... recompile with -fPIC動(dòng)態(tài)庫(kù)的.o沒(méi)加-fPIC重新編譯加-fPIC靜態(tài)庫(kù)鏈接后體積異常大鏈接了不需要的.o誤用了-static全靜態(tài)檢查是否按需鏈接避免全靜態(tài)同名符號(hào)沖突多個(gè)庫(kù)定義了同一全局符號(hào)用visibility隱藏重命名6.2 運(yùn)行期問(wèn)題排查思路cannot open shared object file是最常見(jiàn)的運(yùn)行期錯(cuò)誤。排查順序先用ldd ./main看哪個(gè)庫(kù)沒(méi)找到顯示not found然后確認(rèn)庫(kù)文件是否在預(yù)期路徑再用LD_DEBUGlibs ./main 21 | head -50看動(dòng)態(tài)鏈接器的搜索過(guò)程。LD_DEBUG是個(gè)寶藏工具libs看庫(kù)搜索symbols看符號(hào)綁定reloc看重定位排查疑難問(wèn)題非常有用。另一個(gè)常見(jiàn)問(wèn)題是“加載了錯(cuò)誤版本的庫(kù)”?,F(xiàn)象是程序行為異常但沒(méi)報(bào)錯(cuò)。用LD_DEBUGlibs能看到實(shí)際加載的路徑或者程序里調(diào)dladdr打印符號(hào)所在庫(kù)。根因通常是LD_LIBRARY_PATH里有舊版本或者系統(tǒng)路徑下有同名庫(kù)。這也是我前面強(qiáng)調(diào)慎用LD_LIBRARY_PATH的原因。6.3 幾個(gè)容易忽略的細(xì)節(jié)符號(hào)版本控制大型項(xiàng)目里同一個(gè)庫(kù)可能有多個(gè)不兼容版本共存用 version script 給符號(hào)打版本標(biāo)簽程序鏈接時(shí)記錄所需版本運(yùn)行時(shí)精確匹配。這個(gè)機(jī)制 GNU libc 用得很多比如GLIBC_2.2.5自己寫庫(kù)一般用不上但遇到version XXX not found的報(bào)錯(cuò)時(shí)要知道是這么回事。構(gòu)造函數(shù)與析構(gòu)函數(shù)動(dòng)態(tài)庫(kù)可以用__attribute__((constructor))定義加載時(shí)自動(dòng)執(zhí)行的函數(shù)destructor定義卸載時(shí)執(zhí)行的。注意執(zhí)行順序依賴庫(kù)的構(gòu)造函數(shù)先于被依賴庫(kù)執(zhí)行析構(gòu)順序相反。如果構(gòu)造函數(shù)里依賴了別的庫(kù)的初始化結(jié)果順序搞反會(huì)出問(wèn)題。靜態(tài)庫(kù)的循環(huán)依賴兩個(gè)靜態(tài)庫(kù)互相引用時(shí)鏈接順序要重復(fù)寫比如-lA -lB -lA或者用-Wl,--start-group -lA -lB -Wl,--end-group讓鏈接器反復(fù)掃描。動(dòng)態(tài)庫(kù)沒(méi)這個(gè)問(wèn)題因?yàn)榉?hào)解析是運(yùn)行期做的。最后分享一個(gè)我常用的調(diào)試組合gcc -Wl,--verbose看鏈接器詳細(xì)過(guò)程objdump -d反匯編看實(shí)際生成的代碼readelf -a看 ELF 全貌。這三個(gè)工具配合基本沒(méi)有定位不了的鏈接問(wèn)題。庫(kù)這東西做一次完整的、帶版本管理的、靜態(tài)動(dòng)態(tài)雙產(chǎn)物的項(xiàng)目比看十篇教程都管用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | AV在线性爱| 久久綜合很很很| 亚洲一本大道中文字幕无码在线| 午夜亚洲WWW湿好大| 又摸又舔在线观看网站| 偷拍 精品 另类 四区| 看一级特黄a大一片| 肥佬影院91| 99热aaa| 99久久久| 热久久国产精品视频大陆精品| 99色视频| 人妻熟女av国产网站| 性爱视频啪啪啪啪| 国产精品久久久久久久AV大片| 天天综合网在线91| 欲色综合| 91情色在线| 日韩精品9区| 青青草国产盗摄一二三区| 偷拍欧美综合| 六月婷婷激情| 久久9精品视频| 狠狠中文字幕| 9久精品视频在线观看| 亚洲AV资源| 超碰亚洲97| 欧洲天天在线| 97人亚洲综合字幕| 91老司机在线视频免费观看| 97青青操视频| 国产亚洲人妻综合日韩 久久| 日本五十路熟女一区二区| 成人五级久久| 手机在线A片| 一级aaaaa欧美中文字幕录像片| 国产精品麻豆免费视频| www.99热| 天天肏美女| 亚 欧 美 综合| 丝袜夫妻自拍| 午夜福利在线视频1000| 男人天堂毛片| 超碰97人妻免费在线| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 欧洲亚洲综合| 91热色| 婷婷丁香人妻| 欧美97在线欧| 四虎国产精品永久地址入口| 无遮挡一级毛片视频免费的| 黄片色区软件| 青青草久久一区网| 一本色道人妻久久| 国产又黄又爽又刺激久久久久久| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 台湾大香蕉99热| 成人热久久精品| 亚州 综合 色图| 超碰社区97| 国产精品一区二区三区四区五区| 女同女同恋久久级三级| 国内外色色色色色成人视频| 97干色天堂| 综合网97| 日韩免费在线观看不卡| 超碰成人国产| 人人搡人人肉久久精品| 欧美综合色图片| 亚洲在线网站| 亚洲欧洲网站免费观看| 97色伦97色伦国产欧美| 欧美日韩国产黄色片| 国内自拍 日韩激情 99| 日韩天堂av电影在线观看| 久久超碰98| 婷婷九月丁香| 91伊人久| 男人的天堂啪啪啪啪啪蜜桃不卡| 一级黄碟在线观看| 麻豆熟妇乱妇熟色A片在线看| av激情亚洲五月天| 狠狠综合| 亚洲综合贴图91 | 欧美色图亚洲激情| 亚洲乱码国产乱码精网站| 婷婷五月天小说| 啊啊啊不要啊啊受不了了视频在线| 久久久久96| 精品久久无码午夜福利| 久超碰在| 美女t无毒不卡不卡| 日本孕妇一区二区视频操逼免费看| 亚洲导航深夜福利| 射欧美综合| 亚洲性天堂| 五月天丁香网| 人妻美腿丝袜日韩| 亚州色交| 激情小说亚洲| 亚洲人妻一区二区三区| 农村少妇久久久久久久| 国产精品久久久久久久毛片1| 久久超碰98| 亚洲天天综合| 蜜臀精品1区2区| 97久久国产| 91一区二区| 秘书高跟黑色丝袜国产91在线| 欧美精品成人在线播放| 乱子伦一区二区三区国产精品| 日本淫乱女一区二区三区视频| 国产亚洲精品自在线亚洲情侣| 加勒比人妻综合| 免费av高清无码| 美女啊啊啊啊pc| 久久日韩肥臀| 九九天堂| 99国产精品视频尤物| 亚洲天堂自拍| 最新av中文字幕高清| 色噜噜国产在线| 极品销魂美女一区二区| 97人亚洲综合字幕| 99综合视频| 婷婷丁香人妻| 99re95| 操国产逼| 91丝袜激情在线| 色就色综合| 久久久久大香青草精品综合| 亚洲乱熟女一区二区三区大香蕉| 亚洲人精品午夜不卡| 人人摸人人干人人拍97| 暴力av在线| 丁香五月av| 黄片www视频免费| 日韩一级二级| 污污汅18禁网站在线永久免费观看| 欧美一区二区三区大综合| 久久av无码| 久操在97| 九九性爱网| 国产精品天堂| 性交一区二区在线播放| 日韩啪啪网| 国产精品人妻免费精品| 男人的天堂kva| 中文字幕乱妇免费视频| 国产97av| 国产一区二区三区白丝| 亚洲操人| 自拍啪啪视频| 亚洲加勒比色图| 日韩9区| 色五月激情网| 久久色一区| 69人妻精品一区二区绯色| 加勒比无码毛片| 九九aV| 97在线观| 天天噜| 屌妞视频久久久久久久| 婷婷五月成人| 草草影院最新网址| 东京热,男人的天堂| 97超久碰| 偷拍网站久久男女男| 精品日韩中文在线| 欧美,日韩,中文,另类| 男人的天堂成人的社区| 婷婷视频网| 大黄片做爱的大的| 蜜臀久久久99久久久久 | 大香网站| 岛国在线国产| 国产乱伦亚洲| 超碰在线人人射| 亚洲午夜蜜臀| 97超碰精品成| 激情综合av| 亚洲日本加勒比在线| 温婉少妇玩3p| 婷婷视频在线免费观看| 久久久久久亚洲Av无码| yiqicaoav| 在线播放中文字幕| 97se综合| 97视频620| 丁香五月天啪啪| 欧美午夜视频精品久久| 无码av永久免费专区网站| 欲香欲色| 精品亚洲| 福利视频合集| 亚洲 暴爽 AV人人爽日日碰| 操国产逼| 五月丁香黄色网| 超碰97亚洲| 久久久日本电影| 无码粉嫩白虎一线天b区| 欧美丰满少妇交换91欧美精品| 91爱做| 天天影视射综合网| 日韩精品资源| 欲香欲色| 亚洲三区视频| 欧美性爱五月天| 黄片在线免费在线观看| 国产一区在线免费播放| 日韩探花精品在线视频| 五月激情小说| 偷拍欧美激情| 国产亚卅97| 天天看特黄的免费网站| 熟女网站最新| 天天大干大香蕉| 96精品一区| 免费男人的天堂| 日本亚欧爱爱| 天天欧美| 欧美不卡二区| 男人的天堂一区三区| 日本操BAV| 久久99热这里只频精品6学生| 屌逼传媒| 中文字幕超碰CAO| 亚洲天堂日本| 四虎影视欧美| 秋霞一集毛片观看| 国产成人手机视频激情| 青青草天天亲夜夜操网| 黑操B| 九九热视频这里只有精品| 综合激情一一91| 91老熟女91老女人| 人人操人人摸人人骑| 日韩无码黄色片| 女人高潮大叫一级毛片| 亚洲成人一二三区| 后入式999| 色婷婷视频| 国产精品小视频一区二区三区| 熟女欧美日韩综合婷婷| 久久久精精精| 国产人妖视频一区在线观看| 久久精品免费| 天天cao在线| 一线黄色免费性爱片| 久久免费精品视频免一| 一区| 放黄片放3级黄片没穿衣服| 国产一级137片内射麻豆| 五月丁香激情啪啪| B049AV在线播放| 熟人人妻少妇精品久久| 亚洲中文国际强奸字幕| 精精夜夜| 久草新在线| 免费啪啪一级视频| 亚洲人综合| 国产品精品自在在线午夜免费| 在线视频免费播放一区| 欧美熟妇乱码在线一区| 天天色欧美| 亚洲最大成人a毛毛片| 中文字幕 一区二区 亚洲无码| 色拍偷亚洲| 水多多映视AV| 青青草日逼视频| 国产精品乱码久久久久久久久| 人妻献身系列第54部| 免费视频无码| 99无码| 激情看片网站| 欧美中日韩XXXX| 欧美一区二区三区另类精品| 五月天综合网| 日韩免费一级性爱视频| 日韩中文字幕人妻视频| 99xav| 97色网| AV 少妇 人妻 偷拍| chaopen97久久| 2020中文在线一区二区三区| 夜夜爽妓女| 亚洲欧美黄| 91麻豆天美国产欧美| 90后性网国产欧美| 午夜偷拍久久熟女| 9999亚洲电影| 天天色天天干天天射| 国产青一二三| 嗯嗯啊啊操我| 有码人妻系列| 人人操欧美风骚| 五月色丁香| 国产免费小视频| 国产99 中文字幕日韩小视频| 欲女人妻性色av| 蜜乳AV一区二区三区四| 国产精品另类一区大香蕉| 国产女人成人精品视频| 国产成人五月天丁香花| 九九在线视频| 日韩特级毛片免费观看全集| 国产精品 午夜福利| 国产强奸乱伦第1页| 亚洲一区深夜| 国产精品一级片在线看| 青青草久草AV| WWW黄片COM| 久久黄黄黄| 五月综合色| 天堂性色| 日韩一级二级在线| 亚洲一区二区三区中文字幕| 久9久9久9久9久9久9| 欧美精品999| 色噜噜狠狠色综无码久久合欧美| 啊啊啊啊啊啊啊好爽不要| 在线看的av| 一二三卡欧美日韩人妻免费精品| 久久超碰久| 日韩强奸av| 女生自91网站| 欧美一区二区亚洲天堂| 99婷婷一区二区| 黄色不卡视频| 精品精品精品| 国产日韩区| 久久久一二三四区| 国产丝袜美女诱惑| 国产超碰人人爽人人做| 亚洲情色综合| 午夜综合在线| 色999人与兽| 国产一区在线观看无码AV| 青青草中出视频| 人人喜人人妻| 亚洲色诱惑| 午夜精品久久一区二区| yazhouzaixian| 在现视频女上位好爽| 亚洲国产ⅴ高清在线观看| 0755午夜福利视频| 最新中文字幕av| 激情五月天色色| 亚洲97成人在线观看| 骚人妻少妇视频| 夜夜嗨AV蜜臀av| 欧美性爱系列| 密乳AV免费观看| 国产sv美女内射| 国产不卡中文字幕免费avi| 五月丁香| 久草福利在线资源站| 思思热在线视频在线| 91欧洲入口| 午夜成人福利影视| 96AV精品| www.狠狠干.coom | 久操 高清| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 柠檬AV导航| 热思思免费视频| 久久9精品| 五月天久久婷婷亚洲| 极品丝袜无码| 亚洲天堂性爱| 97超视频在线观看| 欧美内射少妇| 青青草久久一区网| 曰本熟女视频| 乱老熟女一区二区三区| 青青草国产盗摄一二三区| 久久久9品一区二区三区| 99亚洲天堂| 国产尹人在线视频免费| 另类小色呦| 国产精品色片一区二区| 在线国产福利网址导航| 377p欧洲日本亚洲大胆| 国产 三级自拍| 无码抄逼网| 久久久久久精品免费看A级| 久久久久久69国产一区二区| 国产91啪| 自拍大香蕉乱插| 日韩欧美字幕亚洲一区二区| 亚洲综合色婷婷| 蜜桃av综合网发布| 开心五月婷婷激情| 中文字幕在线24| 99精品无码| 嗯啊不要啊在线| 日韩人妻精品久久久久| 2011国产精品| 精产国品一区二三产品| 97在线青| 天干天干天干天天做| 另类图片五月天| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 中文字幕在线高清男人的天堂| 人人操人人摸人| 亚洲精品无码少妇久久| 少妇高潮对白在线观看| 天天操av懂色| 91强在线播放| 中文字幕一区二区三区人妻不卡| 丰满人妻区一区二区三| 人妻一区二区三区四区视频| 日本激情免费大片| 成人看片网站| 久久日本熟女精品一区| 天天影视91看看| 欧美精品三区| 欧美强奸乱| 中文字幕一区av| 麻豆影音天美视频| 男人的天堂com| 秋霞操逼片| 国产美女高潮叫床视频| 日本天天吊| 黑人精品久久97| 果冻传媒A片麻豆熟妇人妻| 日本黄大片在线观看视频| 国产成人免费观看在线视频| 国产黄a三级三级三级av在线看| 国产白嫩精品久久| 9精品久久久久| 人人干黄色| 国产农村一一级特黄毛片| 91狠狠综合久久久久久| 欧美日韩人妻少妇 一区二区三区| 人妻少妇精品视频一区二区三区| 无码逼| julia高潮后不停追击中出| 性生活无遮挡纯毛片在线看| 无码78| 美女写真| 九九英色视频| 一起草三级AV电影在线观看| 亚洲色诱惑| 久久六六| 色婷视频| 色噜噜狠狠色综无码久久| 成人无码在线视频网站| 熟妇熟女视频一区二区三区| 噜噜噜噜天天狠狠| 国产 无码 一区二区| 国产美脚女优尤物在线观看| 亲子敌伦对白在线播放| 欧洲色色| 午夜一区| 综合五月天| 亚洲中文字幕av | 天天色综合图片| 99精品无码| 在线强奷到舒服的无码视频 | 亚洲无码国产精品久久| 亭亭丁香激情| 一起草三级AV电影在线观看 | 精品国产人成在线| 国产视频大全| 乱伦av国产| 玖玖资源中文字幕制服丝袜| 91在线秘 男同| 一区,二区,三区网站| 男人天堂网址| 欧美熟妇精品黑人巨大一二三区| 亚洲97在线观看| 97超碰碰碰| 天天噜| 亚洲 日韩 欧美 国产综合体| 久久久555| 日韩成人免费电影| 国产9区| 九九久久一区二区三区| AV麻豆免费一区| 亚洲综合图色在线| 国产亚洲精品第一最新| 97操b| 欧美后进式| 九九碰九九爱97超碰| 国产精品视频电影| 操逼片国产| 狠狠做深爱婷婷久久二区| jizzjizz欧美| 亚洲se91| 人人澡综合涩| 久久久夜夜嗨免费视频| 人人妻人人澡人人爽久久av| 欧美天堂日韩三级国产传媒| 国产精品女生av| 91激情国产| 丝袜六区| 一起草日韩| av天堂加勒比| 4141514逼喷水三级片| 国产精品网址| 熟女少妇视频| 久久一二三四五六七八九区区| 欧美大香蕉专区网| 日韩大香蕉| 国产精品欧美激在线| 91精品丝袜在线观看| 少妇久久久久| 蜜臀久久精品久久久久视频| 日韩三级久久久| 91人妻精华帖| 9久久精品| 亚洲91网。| 欧美v亚洲v日韩v最新在线二区| 91欧美网| 欧美日韩人妻少妇 一区二区三区| 青女在线| 色五月综合| 韩三级a视频在线观看| 青青草在线视频播放器| www.AV有限公司一区| 综合五月婷婷| 操www| 色九久| 亚洲 欧美 综合 91| 天天操天天射青青草| 亚洲国产欧美中日韩成人综合视频| 91丨人妻丨国产丨丝袜| 国产精品一二三| 日本999精品视频| 丁香激情网| 日韩黄色一区二区三区| Sekablack无码一区| 天堂性色| 农村少妇久久久久久久| 精品国产久久乱码| 97 超碰 人人做 人人爱| 久久女婷| 无码抄逼网| 国产精品嫩草影院免费| 国产精品人人爽人人做可爱福利| 夜夜骑夜夜操| 人妻精品一区二区| 亚洲欧美洲综合| julia ann久久| 操91| 亚洲AV人人澡人人爱| 久久爱超碰网| 97超碰免费人人性爱| 日本九九久久99播| 久久综合18p| 国产精品对白内射| 国产久久久9999| 久久免费中文字幕在线观看| 综合色图区| 中文字幕一区av| 亚洲性爱高潮影院| 99热| 人人妻人人操人人乐| 97超碰jingpin| 啊…啊…操我用力操我| 一本道综合色图| 日韩三级一区| 亚洲精品一二三四区| 香蕉在线一区二区三区| 97视频在线免费看| 麻豆区99999| 欧美色997| 伊人网在线观看| 亚洲综合图片在线| 久艹视频在线| 玖玖综合网| 精品人妻一区二区三区在| 一区二区三区视频| 综合影院永久入口国产| 2020中文在线一区二区三区| 国产高清在线观看欧美| 欧亚在线视频| 91爽啪| 伊人青青一区成人视频在线观看区| 精品久一区免费| 高树玛利亚无码流出| 东北女人| 亚洲精品蜜桃久久久| 99re28在线观看| 亚洲av青草久久一区二区| 最近2018中文字幕在线高清第一页| 色欲av一区二区三区蜜芽| 国产一区在线观看无码AV | 99re综合伊人| 中文字幕欧美丝袜07资源| 天堂69亚洲精品中文字| 91干熟女| 日韩一999精品| 一本久久精品中文字| 一卡二卡在线播放| 久久精品国产亚洲AV清纯| 久久久久亚洲?V片无码V| 日韩精品一区二区三区色欲 | 亚洲成人贴图| 亚洲第一狼人丝袜美女另类| 中文字幕在线观看丝袜| 亚洲揄拍网| 免费精品人妻一区二区三| 国产三区免费在线观看| 香蕉99秘 精品一区丁香| 亚洲熟女乱综合一区二区三区| 97久操| 国产精品人人爽人人做可爱福利| 爱射综合| 很很很很操| 欧美黑人熟妇精品91| 久久精品国产亚洲AV无码做| 精品久久在线区一区| 人人妻天天做天天爽| 极品销魂美女一区二区| 久草婷婷| 老熟妇一区二区三区| 内射夫妻三片| 美女诱惑爱爱| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 久久国内| 97视频在线观看高清资源| 欧美丝袜中文字幕07在线| 91高清无码下载| 99热在线不卡| 91在线免费精品视频| 国产精品老师| 肉丝中文无码高清| 日本操逼二区| 青青草在线视频欧美| 99无码狠狠久久| 97操碰| 久久一二三四五六七八九区| 啪啪资源网| 国产精品久久久九九九| 日韩三级在线观看网站| 强奸少妇AV导航网| 放黄片放3级黄片没穿衣服| 99热这里都是精品| 东京热,男人的天堂| 国产情侣自拍在线播放| 呻吟 欧美 日本 中出| 国产精品露脸在线观看| 亚洲丝袜色图| 看免费的黄片| 国产青视频| 久久成人国产精品| 日本黄色裸日本黄色裸体| 人妻偷拍一区二区三区| 欧洲Au麻豆| 日本成熟少妇A∨网站| 久久久久骚| 草草电影院| 色狠人在线99| 精品日韩中文在线| 另类专区加勒比| 婷婷影院入口| 天天综合网~91| 亚洲综合激情五月久久| 欧美人妻少妇| 乱理日韩中文| 欧美亚洲色图另类国产| 99热日| 色综合九九| 9久久久久| 久久综合久久综合人久久夜精品| 人人操人人插 - 百度 - 百度| 成人女人国产| 狼狼色丁香久久婷婷综合五月| 中文字幕伊人| 丁香五月激情啪啪| 成年无码动漫av片无尽在线| 乱老熟女一区二区三区| 国产精品自在自拍视频| 青青草一区二区高清无码视频 | 欧美中文综合| 一区中文字幕二区日韩| 郑州宾馆老熟女露脸啪啪| 欧美色亚洲色| 97国伦国色| 日本一级二级三级网站| 后入国产| 加勒比AV网| 岛国片在线观看视频亚洲| 九九九免费视频| 亚洲综合性网址| 丁香六月综合激情| 亚洲欧洲自拍图片专区满春格| 国产女人9999| 久久黄色网址| 欧美日韩一区二区三区四区蜜桃| 久久久久熟女| 综合91网| 玖玖视频在线资源一区二区三区| 久久精品国产99精品亚洲蜜...| 无码九九九九| 四虎国产成人精品免费一女五男| 免费毛片在线播放| 眼镜人妻101.com| 高清无码91| 免费成人在线熟妇网| 啊啊啊好爽快点啊啊啊嗯嗯| 3D污黄视频在线观看| 免费观看一区| 午夜福利合集| 色综合久久夜色精品国产天堂| 亚洲综合五月天婷婷丁香| 国产黄色影片在线观看| 酒色综合网| 后入日本1234| 亚洲男人电影天堂| 97在线欧| 超碰天天操| 东北黄色电影| 9 9精品一区二区三区| 免费亚洲黄色视频在线观看| 亚洲欧美日韩免费观看| 欧美性性性| 亚欧操逼片在线观看| 九区国产| 97天天弄| 久久中文色图| 丰满少妇人妻久久久久久| 香蕉综合网| 欧美精品1区2区3区| 天天草夜夜草高潮片| 日韩一级久久毛片| 9久在线视频只有精品| 丰满人妻-区二区三区免费看| 亚欧美综合网。| a人欧美综合天堂麻豆| 粘花网06av视频| 国产丝袜美女诱惑| 精品四五区| 人妻啊啊人妻啊| 日本大片日本一区二区免费高清| 国产精品老师| 免费久久精品麻豆一区二区av| 国产欧美一级在线观看| 天天色天天干天天射| 91精品久久久| 91在线视频免费播放| 日本一区视频在线观看| 亚洲国产婷婷在线播放| 国产99精品一区二区三区免费| 日本黄色精品专区网站| 八戒午夜福利理论片| 国产一区二区三区白丝| 男女性感激情网站| 欧美性爱www免费版| 丰满人妻一区二区三区大胸懂色| 国产成人精品日本视频| 操逼网免费无码视频| 欧美网站免费| 久久久久人妻| 高清不卡一二三区视频......| 成人影 天天操 亚洲| 宅男午夜在线视频| 性爱AV天堂| 日韩免费人妻色情网站| 射丝袜大香蕉| 欧美日韩精品久久久久东北老熟妇| 大香蕉日亚洲日本亚大 | 日日夜夜骑| 夜夜躁狠狠躁日日躁av| 精品人妻视频入口| 波多野结衣先锋影音| 欧美日韩操逼嗦吊| 人妻啊啊人妻啊啊| 四虎视频在线观看| 福利天天都操| 天久久久噜噜噜久久国产精品爽爽| 欧美资源| 欧美性爱中文字幕无线码| 新版天堂中文资源8在线| 91操人| 国产夫妻一区二区| 欧美色图自拍| 91啪啪| 色噜噜精品一区二区三| 99久久9| 久久久中文版| 欧美综合中文| 日韩免费三级黄片电影| 日韩性爱小视频在线观看| 女同女同恋久久级三级| 啊啊啊草死我| 国产精品网站免费| 日本天堂网| 亚洲色图大香| 大香蕉欧美日韩| 色综合婷婷| 亚洲无码 国产无码| 欧美丝袜中文字幕07在线| 98福利在线视频| 97AV在线观看| 精品无码产区一区二| 日韩日韩日韩-国产乱码精品一区二区| 国产精品爽爽v| 视频在线观看一二三区| 国产无码一二三区| 亚洲色图欧美色图制服丝袜| 中文精品少妇天堂| 日韩免费福利在线观看| 日本岛国黄色网址| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 美女爽爽爽刺痛洞洞| 亚洲九九九| 免费黄色片子| 2017天天透天天通天天擦| 翔田千里AV无码秘 三区| 国内三级自拍小视频在线观看| 久久骚少妇| 亚洲不卡三级手机播放| 婷婷综合| 国产丁香精品露脸视频| 黄片aaaaa一区| 自拍欧美| 内射小黄片| 成人AV素股で擦久久| 国产精品另类| 岛国精品视频在线观看| 动漫av中文| 性爱网站一区二区| 啪啪视频mP4| 九七色图| 深爱五月天| 97chaopengongkai| AA丁香综合激情| 欧美日综合| 亚洲精品日日夜夜52| 久久综合久色欧美综合狠狠 | 亚洲一区日韩精品中文字幕| 午夜精品久久久久久久男人的天堂 | 强乱老妇中文字幕| 免费久久精品麻豆一区二区av| 少妇内射视频| 久久精品店| 欧美第一页| 日韩精品永久在线观看| 欧美色图在线视频少妇| 国产熟女乱论| 久操电影网| 超碰国产在线| 亚洲欧美高清| 亚洲综合另类欧美久久久| 成人免费视瓶| 日韩精品99久久久久久中文字幕| 国产最新小视频在线播放下载 | 国产乱子伦久久精品综合一区二区三| 蜜臀少妇一区二区| 91精片| 九月AV| 九九综合久久中文字幕| 97就爱干| 综合啪啪| 2021国产成人精品久久| 精品国产99| 国产不卡免费在线视频| 久久久91福利姬| 99综合视频一体| 亲子敌伦对白在线播放| 久操操| 人妻中文字幕日韩电影| 水滴偷拍| 神马久久中文字幕| 91人妻尻屄视频| 热热色91| 欲香欲色天天天综合和网| 欧美久久伊人| 无码人妻1727| 少妇精品久久久| 久久综合九九| 欧美不卡在线一区二区| 亚洲欧美日韩中文久久自慰| 色婷婷影视| 精品无码一区二区三区| 啊啊啊啊啊啊啊啊要喷了| 任你爽视频| 成人免费毛片| 一区二区三区一亚洲中文字幕、综合区灬 | 天天躁日日躁狠狠躁| 久久人爽| 日本欧美成人片AAAA| 国产成人拍国产亚洲精品| 精品无码产区一区二| 中文字幕在线播放2中文字幕在线观看2| 久久久久久久久久久久黄色| 91精品无码人妻系列| 亚洲中文字幕熟女| 欧美专区17页| 啊啊啊啊啊操我视频| 亚州操逼网| 亚洲熟伦熟妇AV无码春色| 日韩人人精品| 青青草十区九区爱夜| 日本黄 R色 成 人网站| 最新av中文字幕高清| 国产91 丝袜在线播放 | 亚洲诱惑天堂| 久久久av爱| 久草婷婷| 成人美女av| 精品国产91内射久久| 精品人妻一区二区三区鲁大师| 亚热日本熟女| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 日韩亚洲精品一区二区| 久久久久久久唑| 国产精品动态一区二区三区四四| 黄色高清久久无码依人| 91丝袜美女国产| 丰满人妻一区二区三区大胸懂色| 亚洲av无码国产精品字幕| 午夜理论片在线观看免费| 一起草高清无码| 日韩精品午夜操呦呦不卡影院| 美熟女逼导航AV操逼| 日本A级视频| 国产精品对白内射| 最新加勒比丝袜在线| 99激情视频| AV综合中文字幕干| 成人综合久久精品色婷婷| 国产三级多多影院2022国产AA一级毛片无码| 中 文字幕一区二区三四 五 区日 日 骚| 久久久久人妻二区精品叶可怜| 一区二区不卡视| 啊啊啊啊免费视频| 久九九九九九九九热| 日日AAvv| 少好三P| 亚洲中亚日激情视频| 十八禁一区二区无码观看| 欧美成人色| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 久久久久久久亚洲Av无码| 久久欲| 一二三四视频中文字幕在线看| 九九九九热| aaa亚无码专区| 欧美片第一页| 欧美性爱第一页久久| 翔田千里无码一区| 色欲三区| 亚一综合久久久久久久久久| 两性色网| 黑人精品成人一区二区三区| 国产黄色av大片网站| 欧美精品1区2区3区| 免费视频a级毛片免费视频| 极品尤物在线观看| 人妻少妇精品一区二区三区| 久久久久久午夜男人的天堂| 大稥蕉免费视频这里只有精品| 91亚·色| 久久超碰97中文字幕| 欧美猛交黑寡妇中文字幕| 超碰久久精品| 91丝袜人妻| 亚洲AV无码乱码| se吧提供91精品国产91久久久久久 | 国产精品女生av| 香蕉人人操tv| 很很干很很操| 成人熟女视频一区二区三区| 亚洲欧美精品久| 色婷婷A V一二三四区麻豆综合| 国产一线二线三线av| 黄色无码高清黄色无码网站| 99久久久无码精品国产人| 亚洲九月丁香| 人妻啊啊人妻啊| 亚洲人妻熟妇三十三区| 国产乱不卡| 日韩97| 91成人久久| 日韩精品 资源| 丰满搜索结果 -第18页- 久久高清无码| 久久久一级| 99蜜桃臀亚洲成人在线观看| 亚洲涩图欧美| 神马久久午夜| 国产亚洲精品av一区| 97操操| 2000亚洲男人天堂| 精品免费囯产一区二区三区| 成人蜜乳小视频网站| 黄色毛片A片| 久久不卡一区二区| 长久操视频| 精品久久久久久中文字幕视频免费| 日韩性爱1级片视频| 九九在线精品| 另类专区加勒比| 亚洲男人天堂av| 人人干人人搞人人摸| 欧美九九99久久精品| 日韩AV噜噜噜一区二区三区四区| 思思热在线视频免费| 久久98| 9久久美女首页| 99re99| 亚洲色图欧美视频| 大香伊人在线一区| 久久久青青草| 强奸乱伦日韩AV| 日韩99神马视频播放| 亚洲国产日韩精品久久久| 日本不卡高清视频| 中文字幕天天天天天| 久久99九九九九6666免费观看软件| 国产操伦| 啊好爽受不了无码| 淫淫综合网| 伦理片秋霞免费影院| 成人久久精品| 日本操逼aaaaa| 欧美人妻精品| 好爽视频在线观看| www.丁香五月| 91操熟女视频| 亚洲精品aa久久伊人| 欧美人妻中出| 国产性爱在线视频一区二区| 婷婷激情一区二区三区俺也去| 妇女一区二区三区| 三级片网站在线播放| 精品中文一区二区| ..日韩av毛片精品久久久| 内射黑人| 国产无码三级视频在线观看| 花野真衣| 91综合网| 天天看片天天爽| 啊啊啊好多水| 国产人妻精品久久久一区二区三区| 91A欧美电影网站| 大香蕉综合网| 国产成人精品网站| 综合激情五月天| 欧美—性—交—色| 俺去也婷婷| 亚洲色交| 蜜臀久久久久久999| 蜜臀99久久| 内射中出日韩在线观看视频| 91色色网站| 欧美狠狠操| 日韩精品碰碰| 午夜精品久久久久久久| 日韩亚洲Av人人夜夜澡人人爽| 婷婷九月国产| 国产激情视频在线观看| 欧美性夜| 99热亚洲天堂| WWW操逼| 久九9精品| 亚洲欧美国产日本一区二区三区| 日韩成人小视频| 99热精品在线观看| 四虎精品永久在线播放| 欧美 青青草| 日本日逼高清| 国产三级中文字幕粉嫩 | 综合欧美色图| 国产精品对白自产拍| www.91久久| 91精品国产91综合久久蜜臀| 91殴美大片| 91 亚洲 欧美 日韩 国产 综合| 美女黄页网站| 九久9热| 成人美女av| 天天92av| 福利一级版子| 婷婷五月激情综合| 国产综合色精品在线观看| 999综合色| 涩五月婷婷| 久久精品午夜国产亚洲AV无码| 大屁股熟女一区二区三区| 激情五月综合网| 成全动漫视频观看免费下载| 蜜臀久久精品久久久久视频| 天天干,夜夜爽| 日韩性爱视频在线免费观看| 国产视频97| 国产精品网站www| 九九99精品| 午夜视频久久久久一区| 久久久九| 激情文学欧美| 狠狠干综合| 亚洲第一免费视频| 欧美+日产+中文| 色男人色天堂东京热| 亚洲另类综合欧美| 欧美午夜一区二区三区| 亚洲成人激情小说视频| 欧美精品,四区。五区| 伊人97色天使| www99热| 久久成人国产| 欧美片第一页| 五月天婷婷社区| 99re6国产精品99re| 国精品一区二区三| 精品久热| 亚洲中文日韩欧美大香蕉视频| 天天看天天日天天操| 久久久月天| 一二三四视频在线社区中文字幕| 久久免费中文字幕在线观看| 性爱av在线免费观看| 欧美一级久久久丰满| 日本一道在线播放高清| 中文字幕一区二区三区人妻不卡| 欧美性生活内射| 精爱久久| 深夜啪啪啪视频免费| 欧美日韩操逼嗦吊| 岛国视频一二三区| 久久久久久久久久va| 久久日本熟妇熟色一区| 另类图片五月天| 国产精品乱码久久久久久久| 99在线视频播放| 99re8超碰| 天天影视色香色欲| 日本大片日本一区二区免费高清 | 少妇内射视频| 精品无码久久久久| 久久久久七视频| 色婷婷蜜臀av| 国产精品肉丝自拍| 99.色网| 久久久一热在线播放| 999狠狠综合| 欧美成人9797| 综合色图,成人综合网| 国产刺激视频| 嗯嗯啊在线视频| 免费看毛片操穴| 久久,精品一二三| 亚洲色图超碰在线| 欧美78p| 天堂资源欧美| 超碰色中文| 丁香五月天久久精品视频一区二区三区| 中文字幕交换人妻| 嗯嗯啊啊视频在线看| 亚洲欧洲精品成人| 亚洲色欲一区二区三区| 嗯嗯啊啊啊好舒服| 精产国品一区二三产品| 美国久久一二三四| 啊啊啊啊啊啊啊啊要喷了|