免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

C/C++跨平臺開發(fā):macOS/Windows/MinGW下編譯libiconv靜態(tài)庫完整指南

C/C++跨平臺開發(fā):macOS/Windows/MinGW下編譯libiconv靜態(tài)庫完整指南 做跨平臺C/C開發(fā)的人遲早都會遇到字符編碼轉(zhuǎn)換這個繞不過去的坎。尤其是要把一套代碼同時跑在macOS、Windows和Linux上且還要求產(chǎn)物能干干凈凈地單獨(dú)部署的時候編譯一個libiconv的靜態(tài)庫就成了最省心的方案。這篇文章就圍繞“在macOS、Windows以及Windows下的MinGW環(huán)境中分別編譯libiconv靜態(tài)庫”這件事把我在實(shí)際項(xiàng)目里踩過的坑、試過的參數(shù)、驗(yàn)證過的產(chǎn)物整理出來。不管你是要給某個跨平臺數(shù)據(jù)處理工具準(zhǔn)備底層庫還是只想擺脫Windows上缺乏原生iconv的窘境這篇都能給你一條可以直接照著走的路徑。先說清楚我要做什么libiconv是GNU提供的字符編碼轉(zhuǎn)換庫接口簡單核心就是iconv_open、iconv、iconv_close這一組函數(shù)。Windows下沒有官方的iconv實(shí)現(xiàn)MSVC環(huán)境通常用第三方移植版或者干脆自己封裝而macOS系統(tǒng)自帶的iconv實(shí)際上是libiconv的舊版本但頭文件和鏈接庫的位置不算特別規(guī)矩如果你要帶一套固定版本的庫隨程序發(fā)布或者要交叉編譯給某個嵌入式目標(biāo)自己動手編譯靜態(tài)庫幾乎是必須的。MinGW則是Windows上另一條常用路線用GCC工具鏈編譯出原生Windows程序這時候libiconv的靜態(tài)版本同樣能幫我們避免一堆DLL加載問題。整個文章的核心思路是這樣的不繞彎子三種場景分開講每個場景都給出完整命令、關(guān)鍵參數(shù)的含義、以及我實(shí)測過能用的產(chǎn)物驗(yàn)證方法。中間還會穿插我在某跨平臺項(xiàng)目中遇到的實(shí)際報錯和排查過程這部分內(nèi)容普通文檔里不會寫但往往才是真正卡人的地方。1. 為什么非要用libiconv靜態(tài)庫1.1 Windows和macOS上的iconv到底有什么坑先說Windows。很多人第一反應(yīng)是Windows不是有MultiByteToWideChar和WideCharToMultiByte嗎確實(shí)有但那兩個API只能解決ANSI/UTF-16/UTF-8之間有限幾種轉(zhuǎn)換遇到GBK、BIG5、Shift-JIS這種歷史遺留編碼再遇到編碼之間互相轉(zhuǎn)換比如GBK直接轉(zhuǎn)Shift-JISWindows原生API幾乎沒有可用途徑。更麻煩的是Windows上不同版本的UCRT、MSVCRT對代碼頁的處理還有差異同樣的代碼在Win10上跑得好好的換到Win7又變了一副面孔。這就是為什么跨平臺項(xiàng)目幾乎清一色選擇libiconv它把編碼轉(zhuǎn)換統(tǒng)一成一個抽象層一份代碼在所有平臺行為一致。再說macOS。macOS確實(shí)自帶iconviconv.h在系統(tǒng)SDK里也能找到直接#include iconv.h然后鏈接-liconv似乎就行了。但這里有個隱蔽的問題macOS自帶的iconv版本更新節(jié)奏非常慢且Apple對它的自定義改動不少具體行為未必和GNU libiconv完全一致。比如某些邊緣編碼的轉(zhuǎn)換差異、錯誤處理方式、線程安全問題踩到了就很頭疼。如果項(xiàng)目里需要確保所有平臺使用同一個iconv實(shí)現(xiàn)版本而不是“隨系統(tǒng)心情”那就必須自己編一份靜態(tài)鏈接進(jìn)程序。1.2 靜態(tài)庫相比動態(tài)庫在這件事上贏在哪既然要自己編為什么不編動態(tài)庫非要用靜態(tài)庫最直接的理由是部署。Windows上動態(tài)庫意味著要帶一個iconv.dll在exe旁邊再加上依賴鏈上的libcharset.dll弄丟一個整個程序就起不來。macOS上動態(tài)庫雖然可以用install_name_tool調(diào)整加載路徑但帶上rpath的處理簽名、公證的時候也會多一些麻煩。而靜態(tài)庫只需要在鏈接階段把.a或.lib文件吃進(jìn)去最終產(chǎn)物就是一個獨(dú)立的可執(zhí)行文件復(fù)制到任何同架構(gòu)的機(jī)器上都能直接運(yùn)行不需要關(guān)心目標(biāo)機(jī)器上有沒有對應(yīng)的動態(tài)庫、版本夠不夠新。其次靜態(tài)鏈接能讓最終程序的行為更可控。動態(tài)庫的版本由運(yùn)行環(huán)境決定今天編譯時用的符號在這個版本上存在用戶機(jī)器上的老版本庫可能根本沒有這個符號或者行為完全不同。而靜態(tài)庫把實(shí)現(xiàn)完整鎖進(jìn)產(chǎn)物里源代碼是什么版本運(yùn)行就是什么版本。對講究可復(fù)現(xiàn)、需要長期維護(hù)的項(xiàng)目來說這個優(yōu)勢非常關(guān)鍵。這里補(bǔ)充一個我的經(jīng)驗(yàn)靜態(tài)鏈接也有代價體積會增加、多個庫之間可能有符號沖突、安全更新時不能只替換動態(tài)庫。但如果權(quán)衡部署穩(wěn)定性和行為一致性libiconv這種小而穩(wěn)定的庫靜態(tài)鏈接幾乎是當(dāng)下最平衡的選擇。2. 編譯前必須理清的三個平臺差異2.1 源碼與構(gòu)建體系先認(rèn)識GNU autotoolslibiconv的源碼包雖然是GNU項(xiàng)目但真正拿到手后發(fā)現(xiàn)它不止是“一堆C文件”而是基于autoconf/automake組織的一套標(biāo)準(zhǔn)構(gòu)建體系。解壓后你會看到configure、Makefile.in、config.h.in這些文件。它的構(gòu)建邏輯是先運(yùn)行./configure探測當(dāng)前系統(tǒng)的編譯器、頭文件、庫特性生成對應(yīng)的config.h和Makefile再執(zhí)行make編譯。這點(diǎn)很重要因?yàn)閃indows原生環(huán)境下沒有一個“標(biāo)準(zhǔn)shell”來跑configure腳本我們得想辦法讓這套autotools體系在Windows上活過來。三個平臺的實(shí)際差異主要集中在三處終端與shell環(huán)境、編譯器選擇、以及生成的目標(biāo)格式。下面這個表格幫大家快速對照平臺/場景默認(rèn)終端常用編譯器生成目標(biāo)macOSTerminalbash/zshclang自帶libiconv.aMach-O靜態(tài)庫Windows MSVCDeveloper Command Promptcl.exeiconv.libCOFF靜態(tài)庫Windows MinGWMSYS2終端或CMDgcc.exelibiconv.aPE靜態(tài)庫三條路線對應(yīng)三種不同的頭文件和庫格式不能混用。MSVC編譯出來的.lib不能給MinGW鏈接MinGW編出來的.a也不能給MSVC用。這是第一次做跨平臺編譯的人最容易忽略的地方。2.2 工具鏈準(zhǔn)備不同場景該裝什么macOS側(cè)只需要一個Xcode Command Line Tools。打開終端執(zhí)行xcode-select --install裝好就有clang、make、ar、ranlib這些基礎(chǔ)工具。要注意的是別用系統(tǒng)自帶的/usr/bin/make版本太老的問題實(shí)際用下來預(yù)裝的GNU Make 3.81編譯libiconv完全夠用不需要額外裝新版本。Windows MSVC路線有兩套準(zhǔn)備方式。一是裝完整版Visual Studio從“開始菜單”里打開“x64 Native Tools Command Prompt for VS”這個環(huán)境變量已經(jīng)幫你配好了cl.exe、nmake.exe和SDK路徑。二是只裝Build Tools命令行使用vcvars64.bat配置環(huán)境這條適合不想安裝完整IDE的人。我自己的項(xiàng)目用的是Build Tools路線因?yàn)闃?gòu)建服務(wù)器上不需要圖形界面。Windows MinGW路線準(zhǔn)備方式得細(xì)說。MinGW本身有很多發(fā)行版常見的是MinGW-w64但為了跑configure腳本和make我更推薦直接裝MSYS2然后在MSYS2里安裝mingw-w64-x86_64-gcc。這樣你既有MinGW的GCC工具鏈又有了一個Unix風(fēng)格的shell環(huán)境處理autotools構(gòu)建會順暢非常多。官方安裝包地址網(wǎng)上很容易找到安裝完成后在開始菜單打開“MSYS2 MSYS”終端執(zhí)行pacman -S mingw-w64-x86_64-gcc base-devel就能把編譯環(huán)境備齊。這里強(qiáng)調(diào)一下MSYS2里有兩套環(huán)境MSYS環(huán)境編譯出來的東西依賴MSYS運(yùn)行時MINGW64環(huán)境編譯出來的才是純Windows原生程序。我們做libiconv靜態(tài)庫必須在MINGW64環(huán)境中操作。2.3 靜態(tài)庫的產(chǎn)物形態(tài)與命名差異編譯完成后三種環(huán)境下得到的靜態(tài)庫文件名和格式都不同先建立這個預(yù)期后面驗(yàn)收時就能對號入座。macOS下產(chǎn)出的是libiconv.a這是一個Mach-O格式的靜態(tài)庫內(nèi)部的object文件后綴是.o用ar -t libiconv.a可以列出里面的成員。Windows MSVC下產(chǎn)出的是iconv.lib這是一個COFF格式的靜態(tài)庫但要注意MSVC的.lib有兩種情況一種是真正的靜態(tài)庫另一種是導(dǎo)入庫import library只是告訴你符號在哪個DLL里。我們編譯的是前者鏈接時直接把代碼合入exe。區(qū)分方法可以用dumpbin /headers iconv.lib查看文件頭或者在同一個目錄下看有沒有對應(yīng)的iconv.dll沒有DLL的話基本可以確定是真靜態(tài)庫。Windows MinGW下產(chǎn)出的是libiconv.a雖然擴(kuò)展名和macOS一樣但格式是COFF只能給MinGW的GCC鏈接器用。這三種格式互不通用這點(diǎn)必須牢記給MSVC工程用的庫不能拿MinGW編出來的.a去糊弄。3. 實(shí)操macOS上的靜態(tài)編譯3.1 獲取源碼與目錄規(guī)劃先到GNU官網(wǎng)的libiconv下載目錄拿源碼包我這邊用的是1.17版本穩(wěn)定且API變化不大。下載后執(zhí)行tar -xzf libiconv-1.17.tar.gz cd libiconv-1.17這里建議單獨(dú)建一個output目錄把編譯結(jié)果統(tǒng)一放進(jìn)去。因?yàn)槟J(rèn)的configure會把頭文件和庫文件安裝到/usr/local我不想污染系統(tǒng)的/usr/local更希望所有產(chǎn)物都收納在當(dāng)前工程目錄里方便后續(xù)打包。mkdir -p /tmp/libiconv-macos/build-output實(shí)際開發(fā)中我習(xí)慣在工程目錄內(nèi)建third_party/libiconv-macos這樣做的好處是第三方庫和項(xiàng)目源碼一起納入版本管理新同事拉下來不需要額外裝庫。不過這只是目錄組織的偏好核心編譯命令不變。3.2 configure參數(shù)逐個解釋在源碼根目錄指定--prefix為輸出目錄然后手動指定三個參數(shù)./configure \ --prefix/tmp/libiconv-macos/build-output \ --disable-shared \ --enable-static \ CCclang CFLAGS-O2 -arch arm64逐個說明這些參數(shù)的作用--prefix安裝路徑編譯完成后make install會把頭文件裝到build-output/include庫文件裝到build-output/lib。這相當(dāng)于一個“本地虛擬安裝”不碰系統(tǒng)目錄。--disable-shared明確禁止生成動態(tài)庫只生成靜態(tài)庫。libiconv默認(rèn)會同時編靜態(tài)和動態(tài)如果不禁用動態(tài)庫你會看到一堆.dylib文件那不是我們想要的。--enable-static雖然默認(rèn)靜態(tài)庫就是啟用的但顯式寫出來可以讓configure腳本的人一眼看懂意圖。CCclang指定編譯器。macOS上默認(rèn)CC可能是cc它其實(shí)是指向clang的但顯式指定更穩(wěn)當(dāng)。CFLAGS-O2 -arch arm64-arch arm64是針對Apple Silicon的如果是在Intel mac上編譯去掉這個參數(shù)或者改成-arch x86_64如果希望生成通用二進(jìn)制可以寫-arch arm64 -arch x86_64但要注意那樣生成的.a是胖二進(jìn)制體積會增大多數(shù)場景其實(shí)只需要當(dāng)前架構(gòu)。3.3 make與產(chǎn)物驗(yàn)證接下來執(zhí)行make -j8 make install-j8用8個并行任務(wù)編譯速度會快不少。如果機(jī)器配置一般改成-j4也可以。整個編譯過程的輸出里如果出現(xiàn)warning一般不影響最終結(jié)果但看到error就必須停下來看日志。編譯完成后檢查產(chǎn)物ls -la /tmp/libiconv-macos/build-output/lib正常情況下你會看到libiconv.a、libcharset.a兩個靜態(tài)庫以及l(fā)ibiconv.la這個libtool描述文件實(shí)際鏈接時用不到。頭文件方面include/iconv.h是我們要的東西include/libcharset.h是輔助頭通常不用直接引入。驗(yàn)證一下庫里的符號nm /tmp/libiconv-macos/build-output/lib/libiconv.a | grep _iconv_open看到_iconv_open和_iconv這幾個符號就說明編譯成功了。這里加下劃線是Mach-O的C符號命名規(guī)則在Windows的COFF里沒有這個下劃線前綴驗(yàn)證時不要對照錯。這一步我在某跨平臺終端工具中實(shí)際跑過一次整套下來不到兩分鐘。macOS下libiconv的編譯是三條路線里最順的主要原因是autotools體系本來就是為Unix-like系統(tǒng)設(shè)計的在這個環(huán)境里幾乎不會出幺蛾子。4. 實(shí)操Windows上的兩種編譯路線4.1 MSVC原生編譯讓autotools在Windows shell里干活MSVC路線麻煩一些因?yàn)閏onfigure是個shell腳本W(wǎng)indows CMD里沒法直接執(zhí)行而Developer Command Prompt又只提供了命令行環(huán)境沒有bash。解決辦法是先裝一個Git for Windows它自帶bash.exe可以在CMD里調(diào)用讓autotools腳本在bash環(huán)境中運(yùn)行但編譯器仍然指定為MSVC的cl.exe。大致的完整流程如下。先打開“x64 Native Tools Command Prompt for VS”在這個環(huán)境里已經(jīng)配置好了cl、nmake、SDK路徑。然后執(zhí)行set MSYS2_PATH_TYPEinherit C:\Program Files\Git\bin\bash.exe --login -i這樣進(jìn)入bash后環(huán)境變量繼承了當(dāng)前CMD里的MSVC變量。然后在bash里進(jìn)入源碼目錄執(zhí)行configure./configure --prefix/tmp/libiconv-windows-msvc \ --disable-shared --enable-static \ CCcl CFLAGS-O2 -MT這里CCcl是關(guān)鍵直接把編譯器指向MSVC的cl.exe。-MT參數(shù)讓運(yùn)行時庫使用靜態(tài)版這樣最終exe不依賴msvcp140.dll、vcruntime140.dll這些動態(tài)運(yùn)行庫程序復(fù)制到別的Windows機(jī)器上更容易跑起來。然后構(gòu)建時不能用make因?yàn)閍utotools生成的Makefile里寫用的是make而MSVC環(huán)境下更好用的是nmake。實(shí)際操作中我見過有人直接用make也過了因?yàn)镚it bash環(huán)境里帶了GNU Make它也能解析autotools生成的Makefile但最終調(diào)用CC時用的是cl所以核心還是MSVC工具鏈。穩(wěn)妥起見建議這樣執(zhí)行make -j8 make install如果中間報nmake相關(guān)的錯誤或者M(jìn)akefile語法問題可以嘗試把make改成用nmake -f Makefile.msvc但libiconv官方實(shí)際上沒提供完整的MSVC專用Makefile多數(shù)情況還是要走autotools生成的Makefile。實(shí)測Git bash里用GNU make是最順的方案。產(chǎn)物驗(yàn)證時檢查/tmp/libiconv-windows-msvc/lib目錄會得到iconv.lib和charset.lib兩個文件。用dumpbin /symbols iconv.lib如果能列出iconv_open等符號說明庫沒問題。注意MSVC的靜態(tài)庫沒有.a擴(kuò)展名鏈接時直接在Project屬性里加上這個iconv.lib即可。這一步我印象很深最初一直以為MSVC下必須手工寫DEF文件或者用第三方預(yù)編譯包繞了好大一圈才發(fā)現(xiàn)autotools在Git bash cl的組合下就能直接工作關(guān)鍵是CCcl變量別被bash默認(rèn)的gcc覆蓋掉。4.2 MinGW編譯最省心的一條Windows路線MinGW路線的體驗(yàn)是真的好很多因?yàn)镸SYS2環(huán)境天然就是Unix風(fēng)格的shell。打開“MSYS2 MINGW64”終端注意不是MSYS終端確認(rèn)gcc -v能看到x86_64-w64-mingw32-gcc然后進(jìn)入源碼目錄直接執(zhí)行./configure \ --prefix/tmp/libiconv-mingw64 \ --disable-shared \ --enable-static \ CCgcc CFLAGS-O2 -static-libgcc -static-libstdcMinGW下GCC默認(rèn)鏈接libgcc的某些部分還是動態(tài)引入的如果希望最終exe完全獨(dú)立運(yùn)行-static-libgcc能避免對libgcc_s_seh-1.dll的依賴。libiconv的源碼本身是純C不依賴libstdc但加上這個參數(shù)能防止后續(xù)自己的項(xiàng)目里鏈接了C代碼時被動態(tài)庫問題偷襲。當(dāng)然如果項(xiàng)目里沒有C代碼-static-libstdc可加可不加。然后make -j8 make install這個過程一般非常順利基本一條命令走到黑不會像MSVC路線那樣有各種環(huán)境變量問題。產(chǎn)物檢查ls /tmp/libiconv-mingw64/lib你會看到libiconv.a、libcharset.a。注意這里的libiconv.a和macOS下的libiconv.a雖然文件名一樣但格式不同一個是COFF一個是Mach-O不能交叉使用。驗(yàn)證符號時使用nm /tmp/libiconv-mingw64/lib/libiconv.a | grep iconv_openMinGW的COFF符號不像MSVC那樣帶下劃線前綴但nm輸出中可能顯示為T iconv_open、T _iconv_open這是因?yàn)镸inGW內(nèi)部對符號名做了修飾實(shí)際鏈接時用-liconv就行了不需要你手動處理前綴問題。我在某個Windows數(shù)據(jù)采集客戶端里用的就是這套MinGW編譯的靜態(tài)庫配合-static和-static-libgcc最終exe在幾臺沒裝任何運(yùn)行庫的干凈Windows測試機(jī)上都能直接跑起來效果很理想。4.3 兩種Windows路線的選擇建議MSVC和MinGW兩條路線各有領(lǐng)土不是一個替代另一個的關(guān)系。如果項(xiàng)目主工程是Visual Studio解決方案那肯定選MSVC編譯的iconv.lib因?yàn)閂S工程無法直接鏈接MinGW的.a文件。反過來如果項(xiàng)目用CMake且工具鏈?zhǔn)荕inGW或者你在做跨平臺腳本構(gòu)建MinGW路線更合適因?yàn)樗臉?gòu)建過程幾乎無摩擦。另外有一點(diǎn)需要提醒很多在線教程會直接讓你下載別人編譯好的iconv.dll或libiconv.a塞進(jìn)項(xiàng)目里這種做法在個人小工具里可能行得通但放到正式產(chǎn)品里會埋雷。來源不明的二進(jìn)制無法保證和源碼版本一致、無法復(fù)現(xiàn)構(gòu)建過程也說不清有沒有被人動過手腳。自己走一遍編譯流程并不難卻能把這些問題一次解決干凈。5. 典型編譯報錯與排查實(shí)錄5.1 configure階段找不到編譯器或者頭文件最常見的報錯是checking for gcc... no checking for cc... no configure: error: no acceptable C compiler found in $PATH這個八成是工具鏈沒配置好。在MSVC路線下忘了在正確的Developer Command Prompt里啟動git bash就會這樣在MinGW路線下開了MSYS終端而不是MINGW64終端也會這樣。排查方法是先執(zhí)行which cl which gcc如果輸出為空說明工具鏈不在PATH里回到工具鏈配置那一步檢查。另一個常見錯誤是configure: error: C compiler cannot create executables這時候要往前面翻日志看具體原因?,F(xiàn)在常見的是缺少對應(yīng)的SDK鏈接庫。MSVC環(huán)境下如果你用Build Tools而不是完整Visual Studio很容易漏裝Windows SDK的庫文件部分導(dǎo)致鏈接測試程序時失敗。解決方法是回到Visual Studio Installer里勾選“使用C的桌面開發(fā)”工作負(fù)載確保Windows SDK組件已經(jīng)裝上。5.2 編譯到一半卡在某個源文件如果報錯說某個.c文件找不到頭文件比如stdlib.h或stdio.h多半是頭文件搜索路徑?jīng)]配好。MSVC環(huán)境下要確認(rèn)環(huán)境里執(zhí)行過vcvars64.batMinGW環(huán)境下要確認(rèn)mingw-w64-x86_64-gcc以及配套的頭文件包已經(jīng)裝好。MSYS2可以用pacman -S mingw-w64-x86_64-gcc和pacman -S mingw-w64-x86_64-headers來補(bǔ)齊。c89/c99標(biāo)準(zhǔn)相關(guān)的warning不用怕舊版本的libiconv源碼用的是老式C風(fēng)格在GCC的新版本下會刷出一堆declaration warning不影響生成目標(biāo)代碼。只要沒出現(xiàn)error讓它編完就好。5.3 鏈接階段的最典型翻車現(xiàn)場我記得在某跨平臺圖像處理Demo里接過這樣的報錯cannot find -liconv排查方法很簡單確認(rèn)libiconv.a真的存在于指定的-L目錄中且文件名沒有拼錯。GCC的-liconv默認(rèn)尋找的是libiconv.a或libiconv.so。如果你把文件命名成iconv.lib那MinGW的GCC是找不到的必須改名或者在CMakeLists里顯式指名-l:libiconv.a。還有一個MSVC下容易踩的坑鏈接iconv.lib時報LNK2001外部符號無法解析比如_iconv_open無法解析。原因往往是頭文件部分已經(jīng)通過MSVC編譯但編譯器實(shí)際生成的符號名和你用頭文件聲明的不同。最常見的是iconv.h里定義了iconv_open為libiconv_open的宏或者反過來。libiconv的頭文件里有一系列宏用來處理不同平臺下名字可能是iconv_open還是libiconv_open的問題。如果出現(xiàn)奇怪的符號沖突可以打開iconv.h查閱LIBICONV_PLUG相關(guān)宏定義或者直接在代碼里調(diào)用libiconv_open試試配合nm查看靜態(tài)庫里實(shí)際導(dǎo)出的符號名來確認(rèn)。5.4 看似成功但運(yùn)行時行為怪異這個坑很少人提但很陰編譯出的靜態(tài)庫本身沒問題鏈接也成功但程序運(yùn)行到字符轉(zhuǎn)換時返回(size_t)-1errno是EILSEQ。這種問題往往和庫本身無關(guān)而是編碼名不對。libiconv支持的編碼名是特定的比如UTF-8、GB2312、BIG5但如果你傳的是utf8或GBK這種變體某些版本上會識別不出來。穩(wěn)妥做法是用iconv -l列舉系統(tǒng)支持的編碼名——在libiconv源碼目錄里編譯出一個iconv命令行工具然后./iconv -l查看。這個工具在編譯過程中自然會生成位于./tools/iconv或源碼根目錄下不同版本位置略有差異。5.5 常見問題速查表癥狀最常見原因排查/解決方向configure: no acceptable C compilerPATH里沒有編譯器檢查which cl/gcc確認(rèn)工具鏈環(huán)境C compiler cannot create executables缺SDK鏈接庫重新安裝Visual Studio組件或MinGW-w64依賴包找不到iconv.h頭文件搜索路徑未包含include目錄-I指向build-output/includecannot find -liconv庫文件不在-L路徑或命名不對確認(rèn)libiconv.a存在且文件名正確MSVC下LNK2001符號無法解析編碼名宏沖突或者靜態(tài)庫與編譯器格式不匹配檢查iconv.h宏定義用dumpbin查看庫的實(shí)際符號運(yùn)行時返回EILSEQ編碼名不被識別用iconv -l查官方支持的編碼名鏈接成功但exe缺DLL編譯時沒開-static或-MTMinGW加-static -static-libgccMSVC用/MT6. 把靜態(tài)庫接進(jìn)項(xiàng)目的幾個實(shí)際建議6.1 頭文件與宏定義的正確搭配使用靜態(tài)庫時編碼轉(zhuǎn)換代碼里的頭文件寫法要注意#include iconv.h但如果你的項(xiàng)目同時可能接觸到系統(tǒng)自帶的iconv需要重點(diǎn)審視iconv.h里L(fēng)IBICONV_PLUG這個宏。這個宏存在是為了做兼容層設(shè)計當(dāng)系統(tǒng)已經(jīng)有一個iconv時可以通過定義LIBICONV_PLUG讓libiconv使用系統(tǒng)iconv的符號名但當(dāng)我們靜態(tài)鏈接自己編譯的libiconv時通常不需要定義這個宏直接讓libiconv把自己的iconv_open等符號暴露出來即可。為了避免符號沖突libiconv其實(shí)把實(shí)際導(dǎo)出符號定義成了libiconv_open等帶前綴的名字然后通過宏在頭文件里映射成iconv_open。這意味著如果你同時鏈接了其他也提供iconv_open的庫就會出現(xiàn)重復(fù)定義或者符號被覆蓋。解決思路是在編譯自己的C文件時統(tǒng)一使用#define LIBICONV_PLUG或統(tǒng)一不定義并確保所有源文件使用同一個iconv.h頭文件不要讓不同編譯單元各看各的頭文件。這一點(diǎn)在大型項(xiàng)目里尤其重要分散在多個CMakeLists里的子項(xiàng)目很容易出現(xiàn)“有的編譯單元用系統(tǒng)頭有的用libiconv頭”的混亂局面。6.2 CMake集成示例如果是CMake工程以下是我實(shí)際在用的模板支持三個平臺自動選擇對應(yīng)的靜態(tài)庫if(APPLE) set(ICONV_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libiconv-macos/lib/libiconv.a) set(ICONV_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libiconv-macos/include) elseif(WIN32 AND MSVC) set(ICONV_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libiconv-msvc/lib/iconv.lib) set(ICONV_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libiconv-msvc/include) elseif(WIN32 AND MINGW) set(ICONV_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libiconv-mingw64/lib/libiconv.a) set(ICONV_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libiconv-mingw64/include) endif()CMake里引用時add_executable(my_tool main.c) target_include_directories(my_tool PRIVATE ${ICONV_INCLUDE_DIR}) target_link_libraries(my_tool PRIVATE ${ICONV_LIBRARY})注意在Windows下最好再給my_tool傳入/MT或-static相關(guān)flag讓整個可執(zhí)行文件不依賴運(yùn)行時DLL。這屬于工程級配置和libiconv本身無關(guān)但直接決定最終產(chǎn)品能否“一個exe走天下”。6.3 統(tǒng)一的二進(jìn)制符號處理在Windows上如果你同時使用MSVC編譯的某個庫和MinGW編譯的libiconv那么至少要確認(rèn)所有庫都是用同一套C運(yùn)行時編譯的。MSVC有/MD動態(tài)運(yùn)行庫和/MT靜態(tài)運(yùn)行庫之分MinGW有-static和動態(tài)之分混著鏈接輕則鏈接告警重則運(yùn)行時崩潰。最省心的策略是整個項(xiàng)目統(tǒng)一用靜態(tài)運(yùn)行時MSVC每個編譯單元都加/MTMinGW統(tǒng)一加-static -static-libgcc。這樣它們之間的內(nèi)存管理、CRT啟動邏輯才能保持一致否則一個庫在A運(yùn)行時里malloc、在B運(yùn)行時里free結(jié)果往往是一聲不吭地崩掉。7. 關(guān)于編譯性能與庫體積的補(bǔ)充思考靜態(tài)庫寫進(jìn)exe之后體積增幅是很有限的。我實(shí)測libiconv 1.17在MinGW編譯、O2優(yōu)化下libiconv.a大約幾百KB鏈接進(jìn)exe后最終二進(jìn)制增幅也就在百KB級別。對現(xiàn)代程序來說這點(diǎn)體積完全可以接受。但如果你的場景極度敏感可以考慮裁剪編碼支持在configure時指定--enable-extra-encodings之類的參數(shù)或者編譯后手工裁剪不需要的編碼表。不過這不是常規(guī)操作而且libiconv的編碼數(shù)據(jù)多半是靜態(tài)表裁剪收益不大風(fēng)險卻不小——真用到被裁掉的編碼時你根本想不到是這個原因。所以我個人建議保持默認(rèn)全量編譯省心最重要。編譯速度方面三個平臺基本都在分鐘級以內(nèi)幾乎不構(gòu)成工程瓶頸。反而是版本升級和重新編譯的流程更容易被忽視update libiconv后務(wù)必同時更新三個平臺的靜態(tài)庫和頭文件避免Mac上用了新版、Windows還在用舊版結(jié)果同一套源碼在兩邊行為不一致。這種跨平臺差異類bug比編譯錯誤難查一個數(shù)量級。8. 一些經(jīng)驗(yàn)總結(jié)與避坑心得走了這幾輪編譯流程幾個體會非常深。第一別小看環(huán)境變量和路徑問題。三套路線的大多數(shù)報錯都集中在“工具鏈沒在這個終端里生效”而不是代碼本身。每次編譯前先在終端里執(zhí)行which gcc、cl或xcode-select -p確認(rèn)工具鏈在位能省掉大量看起來莫名其妙的報錯。第二不同平臺的產(chǎn)物命名差異要提前接受。macOS下的libiconv.a、MSVC下的iconv.lib、MinGW下的libiconv.a文件名只是表象真正要緊的是靜態(tài)庫格式和符號規(guī)則。把它們按平臺放進(jìn)不同的third_party目錄用CMake或類似構(gòu)建系統(tǒng)做平臺分支才是最省力的管理方式。第三不要用網(wǎng)上隨手下載的預(yù)編譯庫替代自己編譯。并不是說所有第三方預(yù)編譯包都有問題而是你無法確認(rèn)它的編譯參數(shù)、版本和完整來源這在正式項(xiàng)目里引入的風(fēng)險完全不值得。自己編譯的靜態(tài)庫至少你清楚它來自哪個版本源碼、用了什么CFlags、包含哪些模塊。第四碰到奇怪的鏈接錯誤第一步永遠(yuǎn)是nm或dumpbin查看靜態(tài)庫的真實(shí)符號不要憑頭文件猜。頭文件里的宏映射和實(shí)際導(dǎo)出符號之間的偏差是這類工作里最棘手也最常見的坑。最后再分享一個小技巧編譯好的三個平臺靜態(tài)庫和頭文件我會連同源碼版本號一起歸檔在項(xiàng)目倉庫的third_party/libiconv-1.17目錄下目錄內(nèi)放一個README.md記錄每套庫的編譯時間、編譯器版本、configure參數(shù)。三個月后再來維護(hù)這個項(xiàng)目或者有新同事接手看到這份記錄能省下大把重新摸索的時間??缙脚_靜態(tài)庫這活兒本身的編譯時間不長真正容易出問題的全是“當(dāng)時沒記錄下來的細(xì)節(jié)”。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香五月成人社区| 99啊精典免费视频| 久久思思热视频| 91精品91久久久久77777| 久久久一级AAA| 五月天自拍网| 狠狠九九婷婷韩| www夜夜操| 日本久久超碰| 九九视频在线观看视频6 | Av性爱网| 日韩操啪| 婷婷狠狠操| 五月婷婷五月丁香综合| 婷婷天堂综合网| 九九婷婷五月天| 99久热精品在线| 欧美视频五区| 婷婷五月情色| 日韩色色一区| 成人精品亚洲性爱| 99网| 天堂网色色| 免费看欧美成人A片无码| 欧美大香蕉视频| 天天干天天干天天干天天干天天干| www.天天干.com| 色婷婷五月天激情久久| 丁香五月婷婷成人网| 无码AV大香线蕉伊人| 色色色色色色网站| 婷婷亚洲五| 久久精品国产一区二区三区四区| 思思热在线| 欧美天天草人人草| 丁香六月婷婷久久亚洲天堂| 天天爽天天| 色婷婷五月综合网| 久久狠狠欧美| 玖玖婷婷视频| 香蕉人妻AV久久久久天天| 天天搞天天色综合| 日日操夜夜操狠狠操| 国产女18毛片多18精品| 老司机伊人| 五月天婷婷导航| 99人人操人人爱久久久| 丁香五月23111| 5五月综合网亚洲| 99热综合| 色噜噜97视频在线观看| 婷婷五月深爱五月| 婷婷丁香午夜综合影视| 99在线热| 亚洲熟女乱色综合亚洲网站| 在线视频婷婷| www.夜夜| 久久丁香五月| 五月天天爽| www色色com| 五月激情四射网站| 五月色丁香| 狠狠五月天| 五月婷六月综合在线观看| 另类图片五月天激情| 色色网站| 97碰碰视频在线观看| 天天色天天舔天天爱天天爽| 亚洲激情网站无码| 五月丁香色色网| 婷婷丁香五月天色色| 丁香五月天激情视频| 思思热精品在线观看| 丁香色情五月综合激情| 99re视频在线播放| 婷婷玖玖丁香| 人操人人| 操操自拍| 天天日天天干天天爽| 丁香六月婷婷缴情欧美| 性爱综合网| 99 福利 导航| 97人人操com| 五月丁香婷婷综合| 久久99精品视频| 久久视频婷婷| 99热这里只有精| 婷婷五月六月激情| 人人看人人草人人摸| 成人va在线观看视频| 丁香九月综合激情| 午夜九九九九九九九九九九九九九| 五月丁香综合色婷婷| 色五月欧美| 天天干一干| 成人精品99| 亚色网站小视频| 97超碰综合| 日熟女| 亚洲精品**不卡在线播he| www.久久爱| 99视频久久| 亚洲无码99| 婷婷五月噜噜| 婷婷五月天美女视频| 亚洲狠狠狠色婷婷综合激情久久久| 97人人操人人爽| 五月色亚洲| 色护士综合| 久久五月婷天天干| 红桃91人妻爽人妻爽| 久久se 综合网| 成人国产欧美大片一区| 五月婷婷操操| 亚洲99热| 日本三级网址| 亚洲在线操| 五月丁香花视频| 超碰在线超碰| 99色在线视频| 色综久久久| 五月色综合网欧美网| 黄色片区子| 超碰在线人人| 六月丁香五月婷婷首页| 五月婷婷co.m| 深爱激情六月| 中文字幕综合| 高清无码入口| 电影91久久久| 色婷婷最新域名 | 欧美在线视频99| 欧美婷婷日本| AA丁香综合激情| 大香蕉九九| 婷婷爱五月| 99精品偷自拍| 丁香九月综合在线| 久久综合九九| 婷婷五月天亚洲天堂| 色情五月天首页| 伊人婷婷五月| 人人摸人人| 婷婷刺激综合| 97色色视频| 另类少妇人与禽zOZZ0性伦| 中文字幕日产A片在线看| 亚洲精品一二三| 日韩有码一区| 五月丁香美女视频| 日日夜夜狠狠干| 99综合| 99男人的天堂| 婷婷开心综合人妻小说网址| 欧美情月伍月天| 五月婷婷五月天天| 七七久久婷婷| 久久99久久99精品免观看粉嫩| 在线日韩av| 久久A区B区| 岛国在线观看91| AAA亚洲AV| 人妻激情久久| 久青操| 婷婷五月丁香六月| 国产做爰视频免费播放| 婷婷丁香五月综合网上| 强伦轩人妻一区二区电影| 日本99色| 开心婷婷五月天电影院| 五月婷婷,六月婷婷| 蜜乳中文字| 91怕怕网| 91久久久久久久久18| 婷婷综合久久| 伊人九九68| 久久一热| 亚洲中文字幕AV| 激情综合网五月婷婷| 六月丁香啪| 丁香五月花| 色欲天天综合| 激情色播| 亚洲无码九九九| 九九AV在线| 免费AV黄在线播放| 伊人久热91| 亚洲精品影视| 日日狠狠久久偷偷四色综合免费 | 亚洲婷婷五月| 欧美激情综合五月色丁香| 狠狠干综合网| 久久亚洲网| 91精选国| 色婷婷丁香五月| 丁香六月天婷婷开心综合| 97偷拍在线视频| A片一曲| 婷婷五月天无码熟女| 日B日潘金莲BB| 91丨九色丨白浆秘| 99免费视频网| 天堂五月婷婷| 国产成人网站在线观看| 色婷婷综合电影| 99热这里只有精品9| 五月夜丁香| 激情色情五月天| 亚洲精品国产成人AV在线| 色综合xx| www。五月天激情| 婷婷色网址| 婷婷五月花| 天堂婷婷丁香六月网| 五月停停色色丁香| 婷婷欧美激情| 青青草原爱爱网| 99色| 国产精品视频免费看| 婷婷久久国产视频| 99这里有精品视频3| 96精品国产综合久久久久久| 99视频| 色99在线视频| 99九九视频| 欧美丁香六月激情视频| 久久这有这里精品| 99re热| 91成人品| 久久作爱| 超碰在线视屏| 五月丁香久久网| 久久久久久久久久久久63| 伊人激情| 丁香五月欧美成人| 五月婷婷色影院| 婷婷综合国产| 婷婷99狠| 丁香五月婷婷综合激情啪啪啪| 少妇性按摩无码中文A片| 色婷婷导航| 免费亚洲婷婷五月| 国产精品爽爽久久久久久| 激情小说之五月| 久久99激情| 九九久久99| 五月天色网站| 九九99视频精品| 全部老头和老太XXXXX| 乱码操操| 五月丁香综合啪啪| 天堂无码人妻精品AV一区| 九九激情| 国产肥白大熟妇BBBB视频| www.zbzhongsen.com| 色99网站| 校花娇喘呻吟校长陈若雪视频| 激情五月天婷婷五月天| 免费看欧美成人A片无码| 久久婷婷影院| 亚洲狠狠色丁香婷婷综合久久| 五月天激情小说| 激情深爱五月天| 婷婷五月色| 人人爱人人草| 偷拍丁香九月激情| 午夜丁香六月婷| 婷婷五月色色| 天天爽天天爽天天爽天天爽天天爽| 狠狠丁香| 亚洲五月天综合| 日日干干天天干| 五月婷婷激情69| 99人人操人人摸| 天天爽夜夜爽天天爽夜夜爽| 色五月av| 丁香五月色情| 成人片在线免费看| 色五月婷婷婷婷婷婷婷婷婷婷| 熟女色专区| 人人舔人人色人人高潮| av狠狠操| 99在线观看| 欧美亚洲色色色色| 九草性爱| 九九这里只这里只有精品| 色综合爱综合| 婷婷五月天在线观看| 亚洲av网站| 中文字幕永久在线| 婷婷中文网站| 色小说婷婷五月天天天| 六月婷婷八月丁香| 白人荫道BBWBBB大荫道| 狠狠色婷婷7777久综合| 日韩草草草草草草草草草草草草| 人人爽亚洲| www.9797国产| 欧美色激情四射| 操人精品| 互月天综合| 久久久久网站| av操B网站| 色综合大香蕉| 国产VA亚洲VA96| 97婷婷狠狠| 亚洲成av人影院| 色婷婷另类| 日韩色色网| 天天摸夜夜夜| 人妻丰满精品一区二区A片| 激情婷婷网| 色色婷婷五月天| 99热这里只有精品23| 亚洲精品婷婷| 一本久久婷婷| 综合五月亭亭9| 99噜噜| 亚洲欧洲中文日韩久久AV乱码| 天堂五月婷婷| 国产婷婷色综合AV蜜臀AV| 丁香六月天| 婷婷久久在线| av五月天婷婷丁香| 九九99精品免费播放| 丁香蜜臀黄色婷婷五月天| 久久机热思思热| 五月激情六月综合| 九九精品综合| 国产.亚洲.欧洲视频在线| 色六月 婷婷| 丁香五月大香蕉| 日本婷色| 玖玖99精品视频| 婷婷五月色网| 激情六月婷婷啪啪| 五月婷婷之激情五月| 99超级碰免费视频| 久月婷婷| 九色婷婷| 9久久精品| 激情久久丁香| 91碰超| 婷婷五月天堂| 成人在线观看一区| 五月久久婷婷成人网| 久久久99精品免费观看| 亚洲日韩26uuu| 五月开心网| 在线中文av| www.jiujiujiu| 99综合成人视频在线观看 | 另类图片天天影视在线观看| 国产av基地| 五月丁香亭亭| 亚洲无线视频| 九九精品免费| 亚洲精品欧洲精品| 超pen个人视频97| 丁香五月婷婷少妇| 亚洲国产精品VA在线看黑人| AV国产有码| 欧美色图片88| 五月丁香六月婷婷综合网缴情| 国产人妻777人伦精品HD| 婷五月丁香| 日本精品人妻无码77777| 天天综合插插| 99啪视频在线观看| 大香蕉中文| 91操在线视频| 婷婷在线视频| www.亚洲激情| 狠狠爱婷婷爱| 99精品国产在热久久| 色综合久久88色综合天天人守婷| 丁香花综合永久入口| 日日夜夜综合| 色私五月婷婷| 五月婷色| 综合色色色| 婷婷激情人妻| 99∨VTV| 欧美噜一噜| 色情激情五月婷婷| 亚洲区视频| 婷婷五月天另类视频| 风流少妇A片一区二区蜜桃| 激情激情激情网| 色黄啪啪| 日本狠狠干| 婷婷丁香激情| 婷婷五月丁香综合| 99热在线观看| 伊人久久大香网| WWW、日本色丁香co m| 美女婷婷激情亚洲| 激情久久五月天| 99热日韩这里只有精品| 激情婷婷99| 久久婷婷五月丁香网| 婷婷五月天av网| 亚洲成人电影在线免费观看| 五月天婷婷av| 天天天天天天噜| 丁香五月中文字幕| 婷婷中文字幕网站| 五月婷婷与六月丁香图片激情| 人妻少妇色综合| 色久五月天| 欧美丁香五月97色| 亚州欧美黄色电影| 99ri视频| 日本三久久| 亚洲五月天综合| 91pornav在线| 色五月婷婷成人| 97操在线视频| 五月丁香综合在线| 精品99网站| 丁香婷婷五月天色综合| 人人草人人爱| 激情五月激情综合网| 狠狠草婷婷| 丁香婷婷91在线观看视频| 8090在线影视少妇| 无码操B| 五月婷婷真爱激情网| 婷婷色婷婷亚洲成人| 久久女人九九| 久久婷婷五月综合色欧美| 超碰在线成人| 五月丁香婷婷爱| 婷婷五月色网| 婷婷五月天激情综合婷婷五月天激情综合| 色噜噜狠狠色综合网| 天天爱天天天射AV| 成人亚洲精品久久久久| 午夜婷婷| 天天做天天爱| 丁香六月在线| 99综合久久| 亚洲av骚货| 婷婷激情五月综合丁香社| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 99网| 国产精品成人在线| 青青草色在线视频观看| 秋霞丝袜啪啪啪| 99精品丁香五月| 最近中文字幕大全免费版在线| 狠狠久久婷五月| 色五月AV| 九九热精品在线| 欧美VA在线| 九九热在线视频,| 男人天堂亚洲综合| 丁香婷五月天| 九九爱看亚洲| 天天舔天天摸天天透| 就爱啪啪婷婷| 激情久久五月网| 色亚洲色宗合| 亚洲色 视频| www.人人操人人看人人想人人摸 人人人人操,COM| 91狠狠色丁香婷婷综合久久精品| www色色com| 色婷操逼| 777久久综合视频| aaaaaa片| 丁香色五月婷婷91桃色| 五月天涩涩| 五月婷婷六月丁香激情| 99无码精品| 日本99色| 99热这里| 五月停停大香蕉| 9视频在线成人网站| www.金莲av| 大香蕉婷婷婷| 在线观看996精品| 久久99久久99精品免观看粉嫩| 九洲一级A片| 99热这里| 国产精品色色色色| 人人视频人人干人人做| 九九亚洲综合| 伊人久久婷婷| 十二区无码| 日本一级大片| 噜噜噜噜婷婷五月天| 天天草天天爱| 丁香六月伊人| 精品人人操| a在线观看| 日韩在线观看网址| 国产精品国产| 五月情四婷婷| 欧美色五月| 五月丁香啪啪综合| 五月丁香亭亭激情操逼网| 久七香蕉| 精品福利911| 俺去也婷婷| 婷婷五月激情图片| 国精产品一区二区三区| 亚洲高清在线| 丁香五月婷婷高清| 婷婷五月花免费视频在线| 99热这里只有精品2024| 97久久久久| 无码少妇高潮喷水A片免费| 亚洲图色五月天| 天天色播| 舔色婷婷| 偷偷与邻居做爰完整视频| 婷婷丁香五月天操逼| 99热r| 日韩精品二三区| 26uuu精品国产| 色色欧美色色色| 日韩久久色| 六月色国内综合| 婷婷色色丁香五月天| 人妻体体内射精一区二区| 玖色色综合| 婷婷五月天另类视频| 开心深爱激情网| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 久久在这里99| 狠狠狠狠狠狠| 久久99免费视频网站| 99热免费精品热久久66| 99狠狠色| 六月婷色| 婷婷五月天高清无码| 无码AV免费精品一区二区三区 | 婷婷五月天视频| 欧美A级成人婬片免费看理论| 色噜噜狠狠色综合成人网| 97五月天婷婷| 人妻丰满精品一区二区A片| 欧美色色色色色| 99热精品在线免费观看| 丁香五月天91| 婷婷五月天人妻| 天天日综合| 人人九色| 婷婷操久久| 丁香婷婷色五月合集| 亚洲热视频在线| 色色日本欧美| 天天做天天爱天天要| 亚洲精品字幕| 五月丁香六月婷婷不卡免费无码| 天天插天天射| 高清激情av在线观看| 69精品人人人人| 综合网啪啪| 婷婷的色色五月天| 91九色 婷婷| 色色色热热热| 91婷婷色 | 丝袜熟女一区二区三区| 五月婷婷开心丁香| 九九色中文| 激情五月丁香综合网站| 超碰无码老师| 色五月人妻| 丁香五月 激情文学| 夜丁香五月婷婷| 久操香蕉| 热99这就是精品视频| 色停停影院五月天| 婷婷五月色| 久9热视频| 成人网在线视频| 五月天婷婷基地综合网| 久/久精品99看9| 91狠狠色丁香婷婷综合久久| 香蕉综合网| 色天天久婷婷| 色五月丁香91| 国产成人亚洲综合A∨婷婷| 欧美啪啪网| 五月丁香成人| 99爱欧美| 久久99草五月婷婷| 黄色一级影片| 久久精品色| 国自产拍偷拍精品啪啪一区二区| 99久久婷婷五月天| 丁香五月婷婷婷桃花影院| 久久总和99| 丁香六月婷婷久久综合| 五月天婷婷青青草| 五月丁香色六月激情干大屄| 九九熱最新視頻| www.99在线| 婷婷美女精品视频| 日本色色影院| 天天色天天日| 久99热| 九九综合色综合| 色婷婷狠狠| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 日日影院 | 99无吗| 日本色婷婷| av高清无码| 第五色婷婷| 99热精品在线观看| av电影在线播放| 丁香六月综合激情| 五月婷婷说| 久久九区| 色婷婷四虎| 婷婷五月丁香五月| 日本VA视频| 99热最新地址在线| www.99免费视频| 九九黄色网| 狠狠草狠狠草| 婷婷六月插屄激情| 7超碰自拍| 国产操B| 99精品在线观看| www.丁香五月| 久久婷出差欧美色两性综合网| 狠狠色综合网站久久久久| 婷婷色影院| 思思热这里只有精品| 日韩砖区| 538任你爽| 在线一起草av| 国产午夜精品一区二区三区嫩草| 99综合一区| 伍月婷丁香花全集| 深爱五月激情网| 五月丁香在线观看99| 97caop| 99ri视频| 亚洲久久日| 婷婷五月丁香图片人人操| 操91| 狠狠爱婷婷| Www,五月天| 丁香婷婷五月天色播| 亚洲成人一区| 超碰色色综合| 99久久玖玖| 亚洲AV日韩AV永久无码网站| 蜜臀综合久草| 河北真实伦对白精彩脏话| 激情五月天影院| 91超碰在线播放| 另类激情综合| 亚洲最大激情无码| 六月丁香VA| 五月丁香六月婷婷a v| www.25五月婷婷| 九热视频| 久久永久网址| 婷婷五月综合婷婷| 五月天婷婷日日爱| 都市激情久久| 激情丁香婷婷五月天| 99re66热这里只有精品| 三级黄网站| 伊人干综合| 丁香婷婷五月激情| 在线成人网站| 66精品国产成人| 99久热在线精品| 99综合网| 色久在| 婷婷丁香第一页| 五月婷婷六月激情在线| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 久久这里只有精品99| 婷婷天天色| 亚洲中文乱字字幕在线永久| 五月天成人在线视频网站| 亚洲操操操| 91丨九色丨丰满人妖| 久久电影4399| 欧美久热| 欧美黑人巨大性生话| 欧美顶级少妇做爰HD| 亚洲综合色婷| 日本人妻操| 亚洲色图五月丁香| 色婷婷五月天激情| 欧美黑人巨大猛烈cuckold| 色丁香婷婷美女视频网站| 色婷五月| 九月久久婷婷| 久久婷婷五月丁香网| 色五月婷色彩免播放器| 丁香五月aV| 亚洲综合色棒| 久久久www| 激情五月天网站| 天堂在线伊久| 丝袜激情网| 五月丁香婷婷无码中文| www,av好吊操| 色婷婷久久综合| 日本狠狠干| 91免费试看| 久久婷婷久久| 日韩成人精品一区久久久久| 99免费| 亚洲色热| 色婷婷影音| 久久欧洲久久| 国产日韩欧美| 五月激情小说| 五月婷婷色色网址| 色婷婷中文字母五月丁香| 天天看夜夜看| 五月婷婷六月丁香综合在线| AV在线免费观看不卡| 婷婷午夜激情| 日日夜夜爽| 天天干夜夜想| 伊人久热91网| 日本www五月婷婷| 人人摸人人澡人人| 欧美黄色一级录像| 丁香六月婷婷综合| 丁香五月亚洲| 嫩草AV久久伊人妇女超级A| 99热超| 精品无码人妻一区| 在线成人网址| 久久探花91swag| 五月婷婷色播视频| 超碰资源在线| 另类亚洲电影| 婷婷五月天视频小说| 另类激情五月| 开心五月婷婷综合在线精品素人| 热热久久久久久久久| 色色色99| 伊人玖玖婷婷| 99热这里只有是亚洲国产| 狠狠色婷婷7777久| 婷婷久久亚洲| 日本久久人| 97人人操人人拍| 天天干,噜噜色,狠狠色| 欧美操人| 日韩欧美成人片| 日日爽日日| 亚洲成人无码专区| 久久6这里只有精品| 99久久婷婷五月综合| 亚洲激情精品| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 日韩啪图| 日韩在线婷婷五月天综合| 国产精品久久久久久亚洲毛片| 精品成人久久久久久久_一二三四视| 直接看的AV| 婷婷丁香精品视频在线观看| 色五月色五天色情网| 丰满少妇乱A片无码| 丁香六月婷婷综合| 久激情网| 婷婷久久五月天| 淫视馆aV二区一区| 97久久久| 久久五月天婷婷| 五月天激情小说| 啊V视频在线观看| 香蕉狠狠爱视频| 久久久99久久| 99热这里是精品| 色婷婷影院| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 日日撸夜夜操| 五月丁香色婷婷色| 久久99精品久久久久久噜噜| 人人九色| 超碰在线91| 狠狠舔| www.色婷婷| 国产精品久久在线观看技巧| 色噜噜狠狠色综无码久久合欧美| 99色精品视频| 人妻熟女一区二区AV| 人人干人人操人人摸人人做| 91婷婷视频| 婷婷五月天六点丁香五月| 丁香五月婷婷少妇| 久热超碰91| 久草五月| 欧美叉叉叉BBB网站| 欧美97p| 色开心五月丁香| 激情99热| 超碰免费在线| 天天cha成人综合网| 久久婷鲁| 婷婷色九月| 无码一区二区日韩| wwwav大香蕉| 亚洲av骚货| 操碰99| 欧美丰满熟妇BBB久久久| 九九久久综合网站| 五月激情射| 五月天婷婷综合| 五月丁香色婷婷基地| 97色视频网| 色婷婷视频在线| 亚洲狠狠婷婷综合久久久| 婷婷六月成人| 任你爽精品免费视频6| 丁香婷婷五月天色综合| 亚洲一二三网| 二色AV| 激情图片婷婷| 丁香六月婷婷色播| 9久久精品| 色五月婷婷色五月| 99在线精品观看99| 99久久国产综合精品五月天喷水\| 婷婷六月天| 婷婷的五月天另类视频| 色五月自偷自拍婷婷婷婷| www.99热| 丁香婷婷成人网站| 婷婷色色综合激情| a色婷婷| 亚洲情综合五月天| 九九自拍网| 99九九精品视频| 6月丁香婷婷| 久久青草国| 日日日日日| 婷婷色五月激情强奸四射| 婷婷五月丁香五月天| 久久久久亚洲AV无码网影音先锋| WW婷婷五月天com| 九九五月天| 五月婷婷中文| 丁香花五月天| 色婷婷影院| 亚洲有码在线视频| 久久婷婷五月综合色欧美| www.色综合| 91成人性爱视频| 日 日干 日日做| 九九亚洲视频| 1区2区视频| 91碰免费视频| 精国产品一区二区三区A片| 国产成人在线精品| 亚洲第79页| 99热日本| 这里只有精品日韩精品| 久久婷婷激情| 九九99热| 五月婷婷精品视频| 久久精品凹凸分类| 久久五月综合| 伊人五月天在线| 欧美性爱一区| 日本va欧美va国产激情| 26uuu欧美宗合| 亚洲mm色| 狠狠色婷婷丁香六月| 好好干Av| 九九色热| 99热这里| 日韩 中文 欧美| 丁香五月六月| 日本婷婷| 激情影院丁香五月| 五月天亭亭俺也| 另类五月激情| 五月婷婷人妻| 性99网站| 五月激情五月婷婷五月天在线| 色情五月天首页| 91免费在线视频6| WWW.五月天9999| 激情婷婷五月亚洲| tingting五月天亚洲| 五月天开心激情网色欲无码| 久久只有这里精品免费| 色婷婷成人丁香| 婷婷五月亚洲激情| 九九视频这里只有精品在线播放 | 婷婷五月激情的图片| 色婷久| 中文色婷婷| 色五月婷婷基地| 九九热AV| 色色色综合网| 中国女人做爰A片| 五月成人丁香av91| 日本A片一区| 婷婷五月天首页激情| 婷婷六月综合基地| 99热碰碰热| 777色婷婷爱五月| 婷婷国产日本欧美| 欧美综合五月丁香六月婷| xfplayav在线| 丁婷婷五月天在线播放| 天天搞天天色综合| 丁香婷婷基地| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲AV成人在线观看| 国产性爱色| 亚洲最大在线| 性 色 婷婷| 丁香五月婷婷手机| 色天堂A| 99热99在线| 蜜乳久AV| 97婷婷狠狠久久综合9色| 婷婷丁香五月麻豆| 五月婷婷香蕉| 久狠狠狠| 久久这里只有精品热在99| 狠狠精品干练久久久无码中文字幕| 天堂二区| 激情五月天色色网| 亚洲99视频| 色五月婷婷网| 婷婷久草| 欧美日韩中国| 97色婷婷| se99视频| 九九热最新地址| 婷婷五月天桃花网| 夜夜躁婷婷AV| 五月丁香直播| 五月丁香在线| 中文字幕欧美日韩VA免费视频| 日韩九九| 99亚州综合精品成人网| 婷婷中合| 婷婷偷拍网| 亚洲欧美999| 可以看的av| 看逼中文字幕| 欧美综合激情五月丁香| 狠狠色五月天| 亚洲成人AV高清字幕| 生活片五区| 丁香五月激情鲁| 久久这里只有精品8| 5Www色5夜| 久青青久| 久久WW| 五月丁香色停停啪啪啪| 97偷拍在线视频| 外国碰视频网站97| 91av视频| 综合在线观看99| 影音先锋 萱萱| 日韩黄在免| 日韩成人网址| 五月丁香在线观看| 欧美槡BBBB槡BBB少妇| 99热亚洲| 操一操干一干| 久久大国产香蕉| www.粉嫩av.com| 五月丁香婷婷网在线在线| WWW色五月| 夜夜爽天天| 97视频久久| 性爱激情小说AV五月丁香花| 丁香五月久久综合| 婷婷导航| 婷婷五月在线免费| 欧美久久网| 很很色丁香久久停停| 婷婷六月伊人| 97在线99| 无码天天操| 日日夜夜天天| 午夜丁香| 五月丁香啪啪啪啪| 大香蕉操操| www.com五月天| 91麻豆国产三级精品福利在线观看 | 五月丁婷香| 色九月婷婷综合| 五月婷久久草| 欧美婷婷成人| 激情九九九九| 日日综合网| 另类图片五月天激情| 激情美女五月天激情在线| 丁香五月激情网| 97五月天婷婷午夜| 婷婷五月天av| 天天草人人摸| 激情五月丁香五月| 色五月婷婷五月丁香五月激情五月视频 | ′久久99一| 我去色色网五雨天| 97热久久| 丁香五月婷婷激情尤物| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 亚洲天堂啪啪| 91viP在线看| 99碰碰| 五月丁香六月激情在线| 九九热99re8热免费观看| 亚洲综合色网| 天天爱天天做天天舔| 北京熟妇搡BBBB搡BBBB| 色五月婷婷五月久久| 国外亚洲成AV人片在线观看| 婷婷免费无视频| 8050一级网| 抽插特写| 五月六月丁香激情| 久久久久久久久久久44| 久热超碰91| 亚洲精品电影| 午夜色婷婷| 天天插轮理| 大大香蕉综合在线| 激情五月综合亚洲另类| 婷婷色网站| 丁香五月激情五月| 色婷婷丁香AV综合| 色情激情五月婷婷| 国产精品色色| 色优久久| 国产69久久久欧美黑人A片| 五月丁香婷婷伊人| 黄色91在线观看| 操碰91| 天天操夜夜玩!| 五月丁香婷婷激情四射迷人| 99日本黄站| 美臀自射自家人妻| 久9热插入| 伊人久久婷| 婷五月天在线草| 色五月天 丁香| 99在线免费视频| 5月色亭亭视频| 欧美三级大片AA在线看| 97干欧美| 操逼福利视频| 婷婷色基地在线看| 人人摸人人搞| 五月激情黄色小说| 中文在线成人| 欧美在线干| 99国产这里只有精品| 91精品婷婷国产综合久久| 被强行糟蹋的女人A片| 五月丁花六月丁香综合| 丁香五月婷婷狠狠色| 综合色图婷婷| 九九五月天| 天天色天天舔天天爱天天爽| 久久婷婷五月天蜜桃| 国产一区二区三区影院| 这里只有精品久久| 在线五月色播| 色五月婷婷91| 亚洲中文字幕AV在线| 97热这里精品在线视频| 色五月婷婷开心| 成人一级片| 五月丁香综合色婷婷| 97色干| 婷婷六月丁| 五月丁香啪啪激情| 六月婷婷久久| 91丨九色丨国产| 久久婷婷视频| 日本五月天网站| 色色日韩无码| 五月天激情黄色小说在线观看| 97色综合视频| 夜夜穞天天穞狠狠穞AV美女按摩| 激情五月天影院| 九九视频精品在线免费 | 26uuu四色| 九九热99免费视频| 六月丁香婷婷爱| 裸睡玩奶头(高H)| 91爱啪啪| 丁香六月综合激情| 丁香五月婷婷色| 色婷婷视频| 91男同| 丁香五月婷婷亚洲色图| 久月久在线视频| 日本猛少妇色XXXXX猛叫| 欧美精品99| www五月| 激情五月天无人视频在线| 国产欧美日韩一区二区三区| 狠狠干五月天婷婷网| 亚州操操| 2015WWW永久免费观看播放| 5月丁香美女影院| 全部老头和老太XXXXX| 日本91在线| 久久99精品久久久久子伦| 丁香五月 无码| 精品久9| 成人在线二区| 大战熟女丰满人妻AV| 婷婷丁香熟妇综合网| 91狠狠综合久久| 婷婷久久99| 国产成人高清| 日本欧美国产| 9热在线观看| 激情婷婷五月天| 日日操天天操| 欧美黄色韩日网| 五月婷婷中文字幕| 狠狠做深爱婷婷久久综合一区| 五月婷婷综合潮喷| 婷婷五月伦理| 思思热久久久在线| 色狠狠综合| 99九九精品视频| 久久这里有精品视频| 这里只有精彩亚洲视频推荐| 日本九九热| 99成人小视频| 天天日,天天干,天天操| 婷婷亚洲五月| 丁香五月人妻| 99久.| 99精品视频网| 日本久久99| 免费观看全黄做爰的视频| 一级黄在线| 超级碰碰一区| 韩国19 主播内部福利vip免费播放| 五月婷婷七月丁香| 97碰久久| 丁香六月婷婷一区| 开心婷婷五月花| 日本不卡五月婷婷丁香| 99热无码首页| 久久婷婷内射| 少妇综合网| 欧美69久成人做爰视频| 懂色av粉嫩AV蜜臀AV| 天天网曰日曰夜夜综合永久免费| 国产婷婷色综合AV蜜臀AV| 亚洲激情 久久| 日日干干天天干| 激情五月婷婷六月丁香| 偷拍91九色| 五月婷六月| 欧美性生交XXXXX无码小说| 狠狠操狠狠色| 色噜久| 涩五月婷婷| 天天插轮理| 色五月婷婷色五月婷婷色五月婷婷| 女人天堂AV| www.激情五月| 婷婷.com| 久久九九99桃花视频| 亚洲综合网区| 国产裸舞表演WWWW| 日本一道久久| 午夜不卡久久精品无码免费| 特黄三级又爽又粗又大| 国产精品99久久久久久猫咪| 丁香五月色综合色播五月| http://www.sd-xiangsu.com/| 九九99九九99九九99视频网| 色婷婷成人做爰A片免费看网站 | 97色色视频| 久99婷婷色综合| 欧美精品啪啪| www.五月天婷婷姐姐| 天天综合色| 极品少妇XXXX精品少妇偷拍| 91大神在线免费看视频全集男男一起操| 国产成人综合在线| 狠狠色丁香婷婷综合久久97AV| 日本WWW九九九| 国产偷人爽久久久久久老妇APP| 五月丁香欧美综合免费视频| 日本色天堂| 色婷婷很很十八禁| 亚洲午夜av| 蜜桃五月天| 国产67194| 五月婷婷黄| 韩国婷婷丁香五月| 六月婷婷综合| 婷婷基地成人五月天| 天天摸天天舔在线视频| 久久精品性爱| 午夜天堂一区人妻| 九九综合伊人| 欧美人妻一区二区| 大香蕉伊人久久| 精品99在线| 丁香美女主播视频在线观看| 色色热| 大香蕉久久草| 五月婷视屏在线观看| 五月天激情小说网| 九九热99视频| 久久狠狠干| 久久婷婷五月综合色丁香花| 99re66热这里只有精品| 殴美综合激情五月天免费视频| 精品成人在线| 99色这里| 色婷丁香| 国产免费一区二区三区三州老师F1F1.CC| 亚洲VA在线| 亚洲免费看片| 久久九色| 激情四射婷婷| 日本理论久久| 亚洲夜夜操| 熟惀91九色在线| 精品网站99| www色五月| 成人片在线播放| 五月天偷拍| 超级碰碰视频无码| 婷婷综合色五月天| 国产午夜伦鲁鲁| 婷婷六月丁香久| 色色婷婷五月天| 久操b网| 欧美日韩aaa| 天天综合情| 色色色色色色色色网站| 超碰在线观看9| 婷婷五月天色播| 久久资源综合| 天天操天天曰| 玖玖激情网| AV性爱在线| 青青操丝袜美腿| 五月天四色房丁香亭亭| 日韩 mm 不卡| 播播网色播播| 亚洲超级碰| 99热99美国在线观看| 激情av在线| 久久资源网五月婷| 99久在线观看| 深爱激情综合网| 这里只有精品视频在线观看免费| 中文av网|