99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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
返回資訊列表
www超碰| 色婷婷大香蕉| 中文字幕97超级碰| 中文成人在线| 久久只有18视频| 99惹精品视频| 安息电影在线观看完整版| 日本久碰| 日韩色色色色| 激情五月六月婷婷| 婷婷色5月天在线。| 精品动漫 无码av| 久久久性爱视频| 欧美日韩成人在线网站| 婷婷激情视频| 少妇人妻人伦A片| www.91有码.com| 久久久久人妻精品| 色综合五月婷婷狠狠干| 26uuu国自产精品| 午夜激情久久| 欧美情色电影一区二区| 色色热| 操逼巨乳91| 五月天婷婷色播在线网| 这里只有精品99视频| 五月婷婷六月综合| 天天肏天天肏| www.精品久9| 1024国产在线| 色欲av伊人久久大香线蕉影院| 久超超碰| 另类激情五月| 丁香婷婷五月综合影院| 天天射美女| 天天综合五月| www,色中色| 亚洲国产婷婷色五月| 丁香五月婷婷综合激情啪啪啪啪啪啪啪| 人人摸人人干| 99操| 亚洲成人在线在线| 五月刺激丁香月综合| 久久亚洲婷婷| 蜜臀AV在线观看| 另类视频在线| 激情综合网五月激情| 婷婷五月综合久久中文字幕| seuuu婷婷| 狠狠干综合| 色色综合色视频| 国产精品久久久久9999小说| 噜噜在线| 亚洲激情五月丁香久久久久| 日本久久99| 色135综合网| 五月天综合在线观看视频| 欧美va视频| 国产亚洲精品AAAAAAA片| 亚洲精品婷婷| 呦呦视频无码播放| 欧美天天爽| 婷婷五月天丁香综合网| 91超级碰碰碰| 激情另类综合| 92国产福利| 图片区 小说区 区 亚洲五月| 1024AV视频| 久热9| 亚洲欧美综合7777色婷婷| 亚洲婷婷91丁香| 丁香五月香蕉| 狠狠色狠狠操| 少妇高潮A片无套内谢麻豆传| 日日夜夜爽爽| 婷婷色播六月无码| 一级片sese片.COM| 五月丁香九九| peg 2区三区四区的| 五月丁香婷中文| 狠狠 久久| 亚洲操B视频| 久久久99免费视频| 婷婷五月 丁香六月| 九九色人| 免费观看18视频网站| 婷婷丁香五月天亚洲| 色色丁香婷婷| 97影院一级片| 亚洲乱码w在线观看| 午夜一区| 色五月丁香婷婷| 丁香婷五月天开心六月| 99久久玖玖| www.狠狠操.co m| 玖玖婷婷婷丁香五月| 99九九这里有免费视频| 久久丁香综合香蕉| 婷婷9月天| 国产乱子轮XXX农村| 丁香五月激情婷婷视频| 久久老码第一| 激情性爱五月| 九月丁香网婷婷| 日本三日本三级少妇三级66| 777.色色| 婷婷五月丁香色综合| www色色com| 天天色情站| 亚洲综合碰| 狠狠狠狠狠狠色| 第四色色六月色综合| 久久婷婷五月综合啪| 丁香六月欧美| 激情内射人妻1区2区3区| 青青草护士中出内射-欧美电影在线天堂新版 | 我想看国产大学生口爆吞精的视频| 狠狠婷婷色| 丁香九月综合在线| 丁香五月综合在线播放| 久色网| 91人人妻人人操| 天天日天天狠狠操| 国产成人综合网| 五六月婷婷久久| 99re66热这里只有精品| 97在线/亚洲| 三日本无码| 亚洲中文丁香| 色色色色网站| 婷婷激情小说网| 99热这里精品| 亚洲啪啪精品| 婷婷五月成人系列| 草榴成人影片| 五月丁香狠狠| 婷婷五月丁香综合网| 成人av免费观看| 丁香五月天论坛| 日本精品人妻无码77777| 成人五月天丁香婷| 色域五月婷婷丁香| 久久停停超碰| 狼人久草| 久久精品性爱视频,| 色五月综合资源推荐| 激情五月天。| 亚洲激情综合五月婷婷啪啪| 五月婷婷很很色| 亚洲婷婷丁香五月在线| 国产激情久久久| 国产激情AV| 9久热在线视频精品| 久久月天堂| 丁香狠狠干| 天堂A∨在线| 日本狠狠色| 97超碰色| 五月激情天| 五月婷综合激情| 婷婷五月天性| 亚州成人综合在线| 另类激情首页| 婷婷五月激情欧美| 99久在线精品99re8热| 变态另类9| 欧美日韩成人在线网| 色婷婷五月影院| 99久在线精品99re8热| 亚洲xx在线| 婷婷五月天激情小说网站| 99热久| 婷婷激情丁香五月天综合| 综合婷婷| 激情综合激情五月| 色色综合五月| 婷婷丁香97| 91狠狠综合网| 五月色综合| 婷婷丁香六月五月天| 婷婷伊人綜合中文字幕| 狠狠五月天激情| 1级欧美日韩| 亚洲激情综合免费| 在线另类视频| 午夜天堂一区人妻| 国产无套精品一区二区| 91精品婷婷国产综合久久| 亚洲综合99| 九九色热| 99热香港| 激情综合九月| 韩国婷婷丁香五月| 另类激情四射| 无码AV免费精品一区二区三区| 99精品在线| 五月丁香WWW| 蜜臀久久99精品久久久久久酒店| 美女天天爽| 亚洲AV网址| 色吧五月婷婷| 丁香美女主播视频在线观看| 丁香激情久久| 99精日本久久| 婷婷精品视频| 天天日日夜夜爽。| 九九热色视频| HD久久精品视频| 99综合免费视频| 亚洲avjiujiur91| 日本wwww在线| 九九aV| 99热在线观看亚洲区| 中文字幕激情综合| 99国产精品白浆在线观看免费| 香蕉AV777XXX色综合一区| 亚洲婷婷五月| 四季8848精品成人免费网站| 亚洲美女高潮久久久久久69| 婷婷综合五月色播| 激情深爱五月婷婷| av第一二区| www.色五月| 99久久免费精品| 丁香五月另类色婷婷麻豆| 国外亚洲成AV人片在线观看| 99热亚洲| 久久只有18视频| 婷婷色色五月天| 亚洲精品第一国产综合亚AV | 猫咪伊人AV| 日本欧美国产| 深爱激情五月婷婷| 3p日韩网站视频| 秋霞日本免费毛片A片| 激情五月天婷婷| 综合久久综合综合| 人妻AV中文系列| 天天干夜夜谢| 色婷五月| 99色综合| 久久99精品久久久久久三级| WWW.亚洲无码| 婷婷色五月激情| 五月丁香五月综合欧美| 思思久日精品视频| 五月天欧美 另类小说| 激情五月婷婷啪啪| 岛囯综合激情网| 天天综合色| 伊人五月综合网| 婷婷大美在线| 五月噜噜噜色综合| 午夜丁香婷婷| 五月婷婷性爱| 成人在线视频网| 九九人人看| 婷婷婷婷婷婷婷婷婷婷丁香| 日本欧美成人片AAAA| 久久久999精品| 天天天综合网| 逼里香不卡| 99精品无码网站| 五月丁香久久精品在线观看| 欧美影院婷婷| 日韩av在线电影| 极品嫩草| 丁香五月综合激情久久潮喷| 丁香花综合永久入口| 99久久久| 欧美成人精品A片免费一区99| 91超级碰在线视频| 日本色99| 综合久久综合| 婷婷六月久久综合导航| 国产在这里只有精品| 久久婷婷久久| 97久久人人操| 97精品综合| 91婷色| 人人操AV| 日本99在线| 色五月丁香91| 色9999综合久久| 狠狠色噜噜狠| 色五月色开心开心五月| 大香蕉伊然在亚洲90| 啪啪日本欧美| 婷婷丁香综合在线| 五月婷婷色播| 婷婷五月天成人导航| 色久女| yellow视频在线观看91| 九九99在线免费在线观看视频| 亚洲综合1024| 色情·com| 99激情视频热| 天天操天天日天天爽| 天天日天天操天天干| 成人AV在线网站| 激情婷婷丁香色五月综合| 国产永久一二一起草| 国产裸舞福利资源在线视频| 丁香五月23111| 久8色色| 色99热| 五月天色婷婷网| 开心网五月色婷婷| 国产激情视频在线观看| 99re在线播放| 久久五月天丁香| 久久婷婷丁香视频网| 天天综合网~91综合网| 五月婷婷激情综合在线| 米奇影视资源777狠狠色婷婷五月天激情网 | 午夜婷婷| 美女爆乳18禁www久久久久久| 狠狠综合区| 日本一级| 99热这里只有精品69| 爱婷婷久久视频| 99这里只有精品视频| www.五月婷婷.com| 欧美性生交XXXXX无码小说| 五月婷婷涩涩爱| 欧在线一区| www.9797国产| 欧美日韓成人亚洲精品另类| 天天狠狠六月婷丁香影院| 黄网免费观看| 99综合一区| 思思热在线播放| 婷婷五月激情欧美| 婷婷丁香91综合| 狠狠综合色网| 夜夜做天天爽| 色噜噜五月天| av操逼网| 五月婷久久| 精品色色网| 色婷婷激情| 五月天激情网站| 91re色综合视频| 婷婷综合亚洲| 婷婷六月激情在线视频| 99热这里只有精品9| 日本一区二区三区精品视频| 九九热99re8热免费观看| 五月婷婷激情中心| 久久人妻精品| 色99热| 思思热再线视频| 天堂久久婷婷| 91美女啪啪| 26UUU| 久草热在线视频| 另类小说五月天| 国产一区18| 亚洲激情电影五月天色婷婷丁香一起草| 久久少妇视频| 亚洲乱码日产精品BD| 五月丁香激情综合六月涩涩爱| 亚洲视频丁香网va| 久久丁香| 精品亚洲国产成AV人片传媒| 六月婷婷久久大全| XX色综合| 婷婷五月天伊人在线| www.五月天婷婷| 国产美女无遮挡裸体毛片A片| 亚州操逼网| 婷婷五月天色综合| 综合激情五月丁香| 九九Av| 日韩av网站在线观看| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 丁香熟女乱| 丁香六月av| 999婷婷综合| 婷婷不卡基地| 婷婷五月天成人基地| 丁香六月婷婷色XXXXX| 9色免费网| 亚洲综合婷婷| 国产毛片精品一区二区色欲黄A片| 色久影院| 色日本综合| 婷婷丁香色女人| 激情综合网之激情五月| 五月天激情综合| 五月天婷婷操逼视频| 色色 9| 无码免费人妻A片AAA毛片西瓜| 97资源欧美日韩大香蕉超碰一区| 亚洲成人网站在线播放| 五月激情射| 亚洲第一第二网站| 91九色 熟| 亚洲综合婷婷| 苗黎美女四级成人版一级二级毛片| 亚洲Va成人| 九九热av| 狠狠搞五月天| 激情小说婷婷| 99精品这里只有免费视频| 思思精品视频| 这里只有精9| 99只有精品| 7777激情基地| 色色五月天婷婷| 色哟哟精品| 超碰国产av| 激情五月天婷婷丁香 | 婷婷九月激情| 中文字幕日本最新乱码视频| 婷婷五月天激情亚洲小说| 欧美性猛交99久久久久99按摩| 色五月xxx| 久久99视频| 五月天婷婷一起草| 久久人妻少妇嫩草AV| 天天日人人爽| 艹天天射| 91超级碰碰| 99综合视频| 99免费| 天天操夜夜啊| 九九色网专区| 婷婷五月丁香色综合| 六月婷婷七月丁香| 五月婷婷之综合激情| 天天激情5月天亚洲| av九九| 五月婷婷免费视频| 亚洲免费在线观看岛国| 午夜免费试看| 五月天自拍网| 婷婷综合另类| 深爱激情六月天| 琪琪理论片| 玖玖爱伊人网| 色老久久| 婷婷五月天无码熟女| 色五月丁香A欧美com| 开心激情网五月天| 丁香五月婷婷久久综合激情网| www.色五月| 九九机热| 婷婷丁香久久| 大鸡巴伊人网| 9999久久久久| 99er6热在线观看精品6| 激情床戏| 五月婷婷网久久| 五月天婷婷丁香成人网| 综合AV在线| 99热精品在线播放观看| 免费观看日韩成人av| 婷婷综合色图| 欧洲综合色| 99久久玖玖| 九九热精品| 久久婷婷五月天综合| 亚洲综合草草| 亚洲无码影音| 五月丁香六月色| 99日韩网站| 婷婷丁香九月| 久久综合站| 久草大| 色五月色综合| 人妻熟妇国产精品| 激情五月天福利| 热99在线| 99热精品在线| 五月婷婷丁香五月婷婷| 玖玖资源站国产| 超碰在线观看caop| BBWCUCKOLD精品熟妇| 99视频| 欧洲激情五月天| 久久精品五月天| 国产露脸150部国语对白| 97色啪| wwwxxx五月婷婷小说| 狠狠色狠狠| 六月婷欧美丁香综合| 久久这里只有精品99| 操人妻视频91| 国产精品色色色色| 天天肏屄夜夜爽| 婷婷亚洲久久| 九 九九九AV| 丁香六月激情| 色99网| 五月婷婷啪啪综合网| 一本道综合网| 99热www.| 另类色视频| 久久婷婷色情7777网站| 成年视频免费观看| 极品少妇婷婷五月| 亚洲av电影在线| 婷婷五月天亚洲色| 五月婷婷丁香深深爱| www.99热在线观看| 91精品久久久久久久久久久久| 色啪久| 国产精品美女久久久久AV超清 | 艾小青av| 色九月激情综合网| 婷婷综合五月天激情| 97人人操人人| 99久在线精品| 91九色熟女| 亚洲激情| 99热999| 亚洲精品第一国产综合亚AV| 色五月激情五月| 99无码精品| 婷婷99狠狠| 激情性爱五月天| 超碰在线中文字幕| 五月天丁香成人| 久久人妻视频| 极品另类| 色色色99| 99热这里全都是精品| 婷婷五月丁香综合激情| 久久久.COM| 久久最新色| 天堂综合久| 婷婷五月天在线观看| 夜夜谢天天干| 久热一本| 99久在线精品99re8热| 99热超碰| 中文字幕无码人妻少妇免费视频| 国产精产国品一二三在观看| 婷婷丁香激情五月天色色色| 日韩aⅴ视频| 亚洲成人综合网在线免费观看| ztEJj| 艹色18p| 成人AV网站在线| 婷婷丁香五月激情密臀av| 五月丁香人妻| 五月色网| 丁香开心深爱| 婷婷五月天在线观看免费| 日韩av在线播放综合网| 精品九九久久| 欧美精产国品一二三区| 五月丁香综合啪啪| 色综合久久88色综合天天人守婷| 嫩BBB槡BBBB搡BBBB视频| 婷婷五月天在婷| 久久这里都是精品| 日韩性视频| 丁香五月激情综合| 五月天丁香久久综合 | 色五月婷婷九月| 五月婷婷,狠狠操| 狠狠丁香| 99精品偷自拍| 91久久免费| 国产 亚洲 在线| 二人电影免费版在线观看| 亚洲六月婷| 天天干天天干天天干天天干天天干| 国产婷婷五月天| 99热精品在线| 丁J香六月首页| 99自拍网| 天天插天天干天天舔| 亚洲热视频在线| 国产成人网| 婷婷婷婷色| 国产毛片欧美毛片久久久| av网站中文| 九九热精品99| 福利视频在线播放| 操碰99| 亚洲狠狠丁香婷婷香蕉| 超碰在线观看99| 国产精品成人AV在线观看春天| 五月天啪啪网| 如何安全看伊人婷婷| 婷婷六月伊人| 色区久久| www.色色com| 五月婷婷丁香啪啪| 色五月欧美| 五月综合色| 99热一本久道| 丁香五月天殴美激情| 丁香六月婷婷| 国产视频色色色色色色色 | 国产色色网站网址| 五月天婷婷操逼视频| 最新高清无码专区| 婷婷六月啪啪| 五月天最新网| 亚洲熟妇AV乱码在线观看| 99爱99操| 天天日,天天插| 东京热免费视频| 婷婷五月丁香香蕉| 淫水导航| 久久久婷| 日本一级黄色电影| 看片视频在线免费日产在线看| 五月丁香啪| 九洲一级A片| 五月天婷婷无码视频| 色区久久| 激情丁香婷婷| 日日干日日| 久9热视频在线| 99热乎| 久久艹99| 99日本视频| 99热成人在线| 一级AV片| 777丁香六月青青草婷婷综合久月| 亚洲AV人人操| 丁香五月婷婷天堂大香蕉| 久久这里99| 婷婷五月天丁香花| 婷五月天天| 欧洲综合视频| 六月婷欧美| 成人开心五月天| 日本色啪| 色了色综合| 色婷五月丁香久亚洲| 久热九九| 色五月之第四色| 五月婷婷综合网| 欧美啪啪9| 桃色五月天| 一级七香蕉| 久热网在线视频| 日本三级99人妇网站| 热久久66| 九九亚洲天堂| 五月天在线视频尤物视频在线看| 97色婷婷| 五月天激情网页| 91人人人人人| 亚洲色色精品| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 久久精品66| 婷婷丁香18| 五月天精品综合在线| 九九九激情综合| 五月天小说激情| 思思久久99热只有频精品66| 综合在线丁香五月| 婷婷五月在线影院| va亚洲中文在线| 91欧美日韩| 天天日天天干天天爽| 午夜激情久久| 国产精品色婷婷久久久精品| www.91九色| 久久久97| 26uuu淫色| 99精品偷自拍| 婷婷五月成人系列| 伊人综合色干| 色色射| 六月色婷婷欧美| 国产成人精品亚洲线观看| 六月色色婷婷| 九色PORNY在线精品酒店| 亚洲99在线| 操人91| 五月婷婷综合在线| 思思热在线视频99| 五月婷婷丁香五月| 色五月天丁香| 五月激情另类| 大香蕉在线观看9| 五月天婷综合| 亚洲综合网区| 99久久国产综合精品五月天喷水\| 天天爽日日爽夜夜爽| 丁香九月激情久久| 夜夜操夜夜操| 天天色综合网1| 久热99热| 国产人妻777人伦精品HD| 五月婷婷丁香色播网| 综合激情专区| 1024人妻| 色五月丁香婷婷在线观看| 夜夜 操无码| 日本强伦片中文字幕免费看| 丁香五月欧美| 99re热| 四射综合网| 99精品综合| 夜夜爽天操| 婷婷丁香成人| 热99视频精品在线| 国产激情AV| 在线观看玖玖资源免费观看| 中文字幕人妻在线| 一级片操逼视频| 久9热视频| 人妻操逼| 色婷婷色九月| 久久人妻少妇嫩草AV| 婷婷的色色五月天| 综合性视频99| 午夜免费试看| 97ai婷婷| 国产熟妇的荡欲午夜视频| 五月丁香影院| 国产精品久久久久久五月天加勒比| 97性视频| 97碰 在线视频观看| 久久天天| 亚洲无码yw| 99精品无码网站| 啪啪综合网| 久久伊人婷| 丰满老熟妇BBBBB搡BBB| 日韩黄黄| 色婷婷亚洲婷婷| 婷婷五月天com| 婷婷综合网站| 九九精彩久久| 九九99热精品| 精品一二三区久久AAA片| 五月色婷| 这里只有精品视频| 婷婷五月激情视频| 啪啪五月天啪啪| 色婷婷五月天av在线| 成人在线视频一区| 雪千夏麻豆| 久久视频在线视频| 天天日天天干天天操| 六月婷婷啪啪| 亚洲另类视频| 青青草原99热| 欧美视频在线观看噜噜| 丁香六月 婷婷六月| 99精品久久久| 神马欧美精| 99久久高清视频| 五月激情综合网婷婷| 91丨九色丨熟女高潮| 婷婷综合在线| 亚洲av免费在线| 日本爆乳片手机在线播放| 99视频只有这里精品| 操逼在线视频| 亚洲 在线 性爱| 五月停停直播| 丁香六月 婷婷六月| 亚洲午夜AV| 在线看片av| 99精品久久久| AV在线免费播放| 日本97在线视频| 97九色视频| 色一情一乱一乱一区9| 五月婷婷丁香综合,亚洲天堂| 色色色色丁香| 欧美黄色一级录像| αv中文字幕在线观| 欧美槡BBBB槡BBB少妇| 免费看欧美成人A片无码| 激情五月天综合网| 亚洲国产精品SUV| 国产99久久久国产精品免费看| 久久99网站| 开心激情站| 亚洲亚洲人成综合网络| 9精品久久999| 久久婷婷免费| 激情五月天福利| 色色五月天com| 天天干天天曰天天射| 久99热在线观看| 欧美 日韩 成人 在线| 99在线视频色版| 久久激情网| 天天玩天天摸| 五月天影院婷婷在线观看| 2w在线视频| www,天天干| 色婷婷88| 亚洲中文乱字字幕在线永久| 国产精品18久久久| 久综合4| 97超碰99热99| 色婷婷久久综合久色综| 婷婷久久久| xx色综合| 婷婷六月五月| 中文字幕人妻在线| 久久久久久久久久8888| 精品二区| 婷婷五月天丁香激情| 99久热在线精品| 99在线观看精彩视频| 色婷婷九月综合| 舔色婷婷| 五月综合无码| 大香蕉久久视频久久视频| 亚洲视频久久| 五月丁香亚洲校园欧美| 五月天婷婷色小说| 色五月婷婷九月| 六月激情婷婷| 欧美十二区| 色娸娸综合网| 最新激情五月天| 欧美婷婷精品激情| 丁香六月在线| 就爱日五月天| 久久婷婷热| 久久久久99精品成人片| 99爱视频| 大战熟女丰满人妻AV| 热婷婷久| 五月丁香综合激情在线观看| 五月激情网站| 色99在线视频| 亚洲成人av在线观看| 欧美久久婷婷| 情婷婷五月天| 思思热视频| 在线播放成人| 播五月婷婷开心| 这里有精品2| 九九成人| 任你日热视频| 777丁香六月青青草婷婷综合久月| www,天天干| 欧美成人精品A片免费一区99| 加勒比久热| jiujiu无码五区| 另类小说色婷婷| 国自产拍偷拍精品啪啪一区二区| 激情四射婷婷色色色| 五月婷婷久久开心网| 国产美女视频久| 日本精品人妻无码77777| 第五婷婷伊人丁香色| 九九热在这里只有精品| 色综合久久久久| 亚洲AV日韩AV永久无码网站| 六月丁婷婷| 在线视频99| 偷拍九九热| 狠狠色噜噜狠狠色噜噜噜999| 天天日本夜夜谢| 欧洲MV日韩MV国产| 97人人草| 日韩在线观看亚洲| 人人综合色| 色人五月婷婷| 综合啪啪| 五月婷婷九九热| 五月天激情网页| 99久久99久久综合| 91操熟女| 第四色大香蕉| 91亚洲视频| 伊人婷婷激情| 9色在线| 欧美色五月| 久久WW| 夫妻超碰在线| 色色综合视频| 免费看欧美成人A片无码| 四月婷婷五月色综合| 激情av在线| 一级性感毛片| 天天操综合网站| 日韩AV在线影片| 五月婷人妻| 99操碰| 99色婷婷视频| 97碰在线| www.婷婷五月天| 91九色中文| 欧美亚洲成人在线| 天天做天天爱天天爽综合网| 丁香婷婷影院| 久久亚洲婷婷| 黄色av网站在线免费播放| www.91有码.com| 免费看欧美成人A片无码| 永久思思热在线| 97色婷婷成人综合在线观看| 欧美激情综合色综合啪啪五月| 99干在线视频| 久久思思精品| 亚洲成人中文字幕| 无码操B| 丁香五月婷婷综合91| 丁香婷婷色五月| 亚洲欧洲小视频9| 夜夜干天天干| 五月天堂色色| 99色色网| 99操无码视频观看| 92久久| 香蕉婷婷| 婷婷五月影院| 色五月开心五月激情五月| 免费观看的av| 欧美丁香六月激情视频| 综合福利网| 亚洲色情网站| 九九精品热播| 久久久网站| 日本熟女视频一区二区| 五月天激情视频| 五月开心婷婷| 九九99偷拍视频| 狠狠色噜噜狠狠狠888| www.色婷婷.com| 色婷婷影视| 成人五月天色天堂| 日本操B视频| 99热在这里只有精品| 97电影99热| 五月天色影院| 颜射 精品性爱av| 色综合女人99| 超碰在线9| 欧美情月伍月天| 激情内射人妻1区2区3区| 人人人人人人人草| 伊人碰碰婷婷| 六月激情网| 激情狠狠丁香月| 婷婷亚洲久久| 激情五月天电影| 丁香五月综合在线| 99热观看| 婷婷五月成人| 26UUU精品一区二区Com| 亚洲国产网站| 日日.c| 五月开心啪啪| 9精品视频在线观看| 99热这里是精品| 伊人色欲五月天| 男女免费视频999| 91超级碰碰| 天天操屄网| 在线播放成人网站| 久久婷婷七月丁香| 丁香五月手机在线| 婷婷丁香久久五月综合| 五月丿香啪啪| 99视频只有精品| 婷婷五月中文在线视频| 91干| 婷婷综合在线网| 婷婷午夜| 韩国三级五月天婷婷。| 亚洲精品99| 91碰人人| 色婷婷丁香五月| 五月综合缴情网| 色色色色色色色色五月先| 任你躁XXXXX麻豆精品| 色色色婷婷| 五月丁香婷婷婷婷综合网| 日本WWW九九九| 国产乱子轮XXX农村| 丁香婷婷性久久| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 五月丁香999| 六月婷婷色色色| 黄色三级毛片中字| 91久久| 99成人免费热视频| 麻豆科斗777| 天天干天天曰天天射| AA片在线观看视频在线播放 | 五月婷婷激情综合拍| 在线播放成人网站| 97人人干。| 婷婷性爱| 久9久9热久热| 天天日,天天射,天天舔| 丁香六月天AV| 日本97在线视频| 色八戒操婷婷| 无码人妻少妇色欲AV一区二区| 综合网啪| 五月天精品综合| 亚洲俩性性爱图片久久第六页| 国产免费av在线| 操97在线观看| 五月天综合在线| 99久在线视频| 亚洲成人五月| 婷婷五月天激情五月天网站| 激情五月天噢美| 99精品人人| 欧美婷婷综合| 日韩青青| 国产偷人爽久久久久久老妇APP| 婷婷激情综合| 色五月综合资源推荐| AV79| 五月婷婷五月天天| 欧美成人Va| 日韩成人无码人妻| 国产黄色一级片| 婷婷五月天涩涩| 五月婷三级片| av国产精品| 天天色播| 日本色婷婷| 9色在线| 9l视频自拍九色9l视频自拍九色9l社区| Www.激情| 婷婷五月天激情丁香| 六月丁香五月激情网| 五月天婷婷自拍图片在线观看| 亚洲色情久久| 激情五月天视频| 日韩成人中文字幕| 日本一级特黄大片AAAAA级| 色色色色色五月| 六月丁香成人| 1234操逼网| 黄色91在线观看| 国产永久一黄| 1234操逼网| A1片久久| 免费看成人747474九号视频在线观看| 2021日韩无码| 欧美色色色色色色色色| 狠狠色噜噜狠狠亚洲A∨| 亚洲电影中文字幕| 亚洲第二AV| 久久综合五月| 婷婷涩涩五月天| 五月天丁香婷| 日本3级片偷拍网站| 91viP在线看| 这里只有精品亚洲| 五月激情丁香久久综合网| 色黑鬼导航| 激情合网婷婷| 五区毛片七区毛片| 五月丁香在线综合| 丁香五月欧美| 六月丁香啪啪啪| 伊人99热| 天天做天天爽| 黄色录像网点| 丁香熟女乱| 综合一区二区三区| 91丨九色丨大屁股| 久婷婷五月丁香在线观看| 五月天婷婷自拍图片在线观看| 五月婷婷亚洲综合网| 5月婷婷六月丁香| 五月丁香花免费视频| 婷婷丁香五月亚洲| 日韩在线99| 日日爽夜夜爽| 精品久久久91久久影视网| 五月丁香狠狠爱婷婷综合| 丁香五月最新网址| 婷婷五月天影院| 色婷婷成人在线| 五月伊人婷婷| 大香蕉五月婷婷| 婷婷丁香六月| 日日夜夜九九| 手机在线日韩视频中文字幕| 色五月激情视频在线综合| 五月丁香va| 99热在线这里| 成人网站在线观看视频| 99热这里| 99热超| 综合亚洲六月婷婷在线| 五月婷婷婷婷婷婷艺术| 可以看的av网站| 天天做夜夜爽| 五月丁香色停停啪啪啪| 五月天社区婷婷丁香社区| 久热久色| 五月天婷婷丁香六月| 超碰人人射| 日韩精品一区二区三区,四区,五区视频| 欧美成综合在线观看| 国产成人AV在线| 亚洲综合婷婷| 久久婷婷国产| 久热在线中文字幕色999舞 | 成年人丁香五月| 色综合五月| 亚洲天堂碰碰婷婷| av九九| 99热这里只有精品在线播放| 99在线观看视频| 乱乱av| www.婷婷五月天| 国产熟女日日骚五月丁香爱| 99这里只有精品| 粉嫩AV久久一区二区三区| 五月天丁香综合在线| 男人天堂亚洲综合| 99视频这里有精品| 极品少妇高潮啪啪AV无码| 正宗黄色毛片| 97色伦另类图片小说视频 | 99热这里| 强伦轩人妻一区二区电影| 色色aⅤ網| 五月天成人综合| 五月婷婷亚洲天堂97色婷婷| av久热| 天天操电影院色狼性av| 婷婷成人五月天成人文学| 日本在线wwww| 日日操夜夜爽天天天| 91黄操| 色九月综合| www.sd-xiangsu.cpm| 色婷婷a v| 欧美黄色一级| 亚洲久久视频| 超碰操网| 日本在线观看91| 人妻五月天激情开心网| 色五月综合| 大香伊人婷婷| 激情综合网亚洲色图| 丁香成人五月天| 特级操b片| 99热这里只有是亚洲国产| 99热婷婷| www,久久久| 日日爽夜夜爽| 久久久久久久久18久久| 激情丁香婷婷五月天| 超碰免费人妻| 青青草Avb在线| 久久婷婷丁香六月天| 六月丁丁香| 九九久久99| WWW99热| 激情婷婷网| 伊人久久五月天| 亚洲精品久久久无码| 99re热精品视频国| 97久久久久| 97超碰在线免费观看| 久久机热/这里只有精品| AV成人在线网站| 婷婷五六日| 五月天啪啪| 国产VA播放| 婷婷五月天堂| 日韩成人av在线| 色五月激情| www.色综合.com| 五月丁香六月婷婷激情网| 婷婷激情97| 色婷婷丁香香香蕉视频| 久久人人添人人爽添人人片αV | 黄色激情五月天| 色亭亭丁香五月天| 日本激情五月| 婷婷大香焦| 五月婷婷色吧!| 日韩成人不卡| 五月婷婷激情69| 超碰国产在线播放| 99在线国| 久9精品视频在线| 艾小青av| www.com久久久久久久久久久久久久久久久| 婷婷大美在线| 搡BBBB搡BBB搡五十| 日日操夜夜爽天天天| 天天射影院| 狠狠擼综合| 激情内射人妻1区2区3区| 丁香五月激情六月综合| 成人αV视频免费观看| 丁香色综合| 另类视频一区| 一区二区成人电影| 日本色道视频网站| 黄色aaaaa| 丁香五月婷婷基地| 婷婷五月天777| 日韩精品无码一区二区| 99精彩视频在线观看| 婷婷丁香色五月天| 丁香五月亚洲| 六月激情丁香一道本7777| 第四色五月婷婷| 五月丁香另类图片| www久久99| 色噜噜狠狠色综合日日免费| 玩熟女五十AV一二三区| 激情综合色婷婷啪啪六月天| 人人操碰| 99啪99| 午夜成人AV在线| 色5月婷婷| 综合综合网| 98热精品| 婷婷精品在线| 综合五月天亚洲婷婷| 大色鬼综合| 色婷婷丁香五月天在线观看| 激情五月天啪啪| 天天艹夜夜艹| 五月丁香六月婷婷免费视频| 天天操天天插天天射| 日韩在线99| 五月天天丁香婷婷在线中| av免费在线看不卡无毒| 玖玖热视频| 色欲婷婷五月天| 欧美电影在线观看| 久久五月天色| 久久激情五月天| 日本精品久久久久中文字幕| 色噜噜婷婷| 黄色三级日本| 丁香五月花| 激情五月天偷拍综合网| 天天久久人人| 新激情五月天| 99热免费精品| 婷婷丁香久久五月综合| 久碰久| 思思精品视频| 激情五月www| 香蕉综合在线| 五月丁香花成人社区| 欧美三日本三级少妇三99| 婷婷五月 丁香六月| 欧洲区自拍| 99视频自拍| 欧美丁香婷婷五月| 色色自拍视频网站| 日本A片一区| 五月天婷婷成人网| 五月色色激情网| 色五月xxx| 免费看片操逼| 少妇大叫太大太粗太爽了A片| 99.N在线视频|