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
返回資訊列表
99热天堂| 日韩精品呦呦va| 丁香 婷婷 激情 综合 五月| 男女av免费看| 色色婷| 亚州精品久久久久AV无码| 99资源人人| 久久六月综合| 久久狠狠干| 婷婷久久夜| 色九月国产| 狠狠精品干练久久久无码中文字幕| 精品色色色| 9有码中文| 日本WwW色偷偷丁香花久久久京东热| 五月综合视频| 丁香婷婷色情社区成人小说| 天天爽天天日人人爱 | 婷香五月| 久草网大香视频| www超碰| 激情五月婷黄版| 狠狠草婷婷| 中文资源在线a| 99久久66综合| 亚洲婷婷性爱| 色五月婷婷丁香凹凸| 亚洲中文乱字字幕在线永久| 久久资源网五月婷| 色婷婷五月天成人网| 婷婷五月色影视先锋| 欧美色图天堂网色| 9福利性视频欧美| 变态 另类 在线| 久久婷婷五月天懂色| 五月天成人网在线观看| 综合激情视频| 色婷婷AV在线| 久操操| 丁香五月天色婷婷| 五月天伊人综合| 日日天天干| 久久久久99精品成人片| 小视频一区| 亚洲精品乱码久久久久99| 色v综合网| 丁香五月大香蕉AV| 综合久久五月天| av五月丁香| 亚洲黄网AV| 欧美日本日韩| www.久久99精品| 5月丁香综合图区| 黄色国久久| 国外亚洲成AV人片在线观看| 丁香亚洲色综合| 久久九九99视频| 亚洲色就是色色色| 无码动漫av| 六月激情婷婷综合| 可以免费观看的av网址| 丁香五月天欧美| 五月天色婷婷视频| 毛片色五月| 99热久久这里只有精品2010| 9久久久久久久久久久| 天天综合五月天| 久久精品系列| 亚洲中文字幕在线观看| 九九色video| 九九精品碰| 996热re视频在线观看视频| 日本在线观看99| 五月停视频天堂| 欧美日韩色色| 五月丁香婷婷色| 国产在线6| 天天xxxxxx天天日| 亚洲欧美婷婷五月色综合| 噜噜干日本| 九九99久久| 无码成人AAAAA毛片AI换脸| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 激情丁香久久| www五月天激情com| 九九99九九99偷拍视频免费看| 91丨九色丨熟女高潮| 欧美婷婷| 成人丁香色| 91viP在线看| 99re6热在线精品视频播放速度| 丁香六月婷婷激情综合| 开心五月深爱五月丁香五月激情五月| 伊人激情啪啪| 激情婷婷五月在线合集| www。五月天激情| 婷婷五月丁香在线观看| 五月丁香婷婷综合久久| 天天肏天天舔AV| 亚洲自拍天堂| 99热骚货| 能直接看的av网站| www.91在线看| 亚洲人人操| 99热97美女| 大香蕉伊人99| 五月婷婷五月丁香| 久久大香蕉丁香| 国产精品人妻欲求不满| 99热这里只要精品免费| 国产古装妇女野外A片| 九 九九九AV| 久久激情网| 99热在线观看这里只有精品| 精品国产乱码久久久久夜深人妻| 无码人妻激情| 激情床戏| 殴美日韩成人| 成人丁香婷婷| 伊人九九68| 91九色网| 无码操B| 操逼综合激情网| 噜噜噜噜噜在线| 噜噜吧天天爱| 激情熟女网| 五月丁香天天| 噼里啪啦完整版中文在线观看| wWW九九在线播放| 激情综合五月色丁香婷婷| 婷婷五月天电影网| 激情小说五月丁香在线视频观看视频| 香蕉久久国产AV一区二区| AV在线不卡网站| 俺来也综合网精品一区| 99热在线只有精品| 久久婷婷丁香五月一二三| 在线中文av| 99久久精彩视频| 99热精国产这里只有精品| 九九热在线观看6| 国产精品色| 丁香五月之久操视频| 色婷五月婷婷| 荡乳尤物3HP1V5| 久久久久久久97| 五月精品| 丁香激情四射| 成人丁香五月天| 91玖玖| 天天爽,夜夜爽| 色五月天 丁香| 婷婷五月色亚洲| 丰满少妇猛烈A片免费看观看| 日韩一级片| 五月婷婷激情久久| 天堂婷婷五月在线| 激情五月天。| 2025天天日爽| 狠狠色丁香| 日韩啪啪视频| 一区二区中文字幕| 婷婷狠狠综合网入口| 久久网思思| 五月天久久小说| 色99欧洲色19| 91婷婷丁香五月| 色婷婷六月天| 狠狠色丁香99| 97se在线视频| 亚洲人妻AV| 国产成人+综合亚洲+天堂| 91九色国产在线| 99日在线视频| 亚洲精品国产A久久久久久| 五月丁香在线国产| 任你日热视频| 国外亚洲成AV人片在线观看| 婷婷干五月综合在线播放| 在线日本www| 国产日韩亚洲欧美在线观看| 黄色五月婷婷| 国产AV影片| 亚洲色婷婷五月| 久久大香蕉伊人| 久久久大香蕉| 色五月天激情| 日韩 中文 欧美| 99热亚洲精品| 都市激情五月婷婷亚洲| 婷婷中文在线| 丁香五月成人自拍| 成人片在线播放| 久久有码| 综合天天综合| 国产色99| 99在线精品免费视频| 国产精品热搜丁香五月婷婷| 色婷婷五月天av在线| 成人片黄网站色大片免费毛片| 精品人妻久久久久久久| 中文字幕综合网| 亚洲人人操| 噜噜噜久久亚洲精品国产品91| 五月婷婷九| 涩五月婷婷| 六月婷婷网站| 五月丁香手机在线| 色婷婷丁香九月| 久久99热这里只频精品6学生| 婷婷丁香色五月| 六月丁香婷| 超碰日韩人妻在线| 啪啪啪大香蕉| 激情五月天啪啪| 影音先锋女人av鲁色资源网小说免费 | 狠狠狠狠狠| VfJxEwPH| 亚洲综合丁香五月| 青青操绿aaa一区日v| 九九九九成人| 日韩黄在免| 99热热这里只精品996小说| 五月婷婷丁香大陆免费| 五月丁香综合啪啪啪啪啪| 大香伊人婷婷影院| 激情九月丁香婷婷| 麻豆AV一区二区三区| 99精品视频偷拍| 天天天天天天天操| 伊人五月久久| 天天爱天天做天天舔| 亚洲一区二区无遮挡A片| 丁香五月激动深爱欧美| 天天天天操| AV中文在线| 丁香五月天综合| 五月婷婷综合色啪首页| 五月丁香六月婷婷综合网| www.henhenl| 婷婷日韩| 欧美婷婷丁香五月| 第1影院之五月婷婷| 国产露脸150部国语对白| 日韩aaaaa| 另类专区在线| 国产超碰在线| 久操大香蕉| 丁香激情五月| www.99热在线观看| 91久久| 伊人大香蕉毛片| 成人国产欧美大片一区| 99热热热99精品婷婷| 中文av网| 97色干在线观看| 丁香五月电影| 色婷青青| 香蕉99网| 丁香婷婷色情| 99熟女| 五月婷婷偷拍| 婷婷她六月天| 婷婷五月天99| 丁香五月婷婷手机| 99色| 久久激情五月| 丁香五月婷婷综合啪啪| 久久天堂女人| 黄色三级日本| 五月丁香六月婷婷色| 五月丁香少妇A| 婷婷丁香成人网址| 97色色在线视频| 久热这里只有精品在线| 丁香久月| 久久性爱视频网站| 99色综合| 日韩一级网站| 丁香五月天无码AV| 99久久综合网| 亭亭色网| 国产精品A成V人在线播放| 天天射网站| 五月丁香六月激情| 亚洲精品国产成人AV在线| 99精品无码视频| 亚洲开心激情网| 色婷婷香蕉丁丁网| www.97干视频| 激情丁香婷婷六月天| 538在线| 伊人婷婷色激情丁香| 华人在线免费| 人人草人人爱| 九月丁香八月婷婷久久综合久97| 五月婷婷性爱| 丁香五月综合在线视频| 婷婷久久亚洲| www.韩日视频| 一起草无码视频| 色婷婷色情| 婷婷六月丁香欧美视频在线| 日本片日本片祼观看网站在线看中文版网页在线看 | 色五月激情网| 色www久视频| 狠狠 久久| 天天爽在线视频| 激情五月婷在线精品| 青青草五月天| 精品一二三区久久AAA片| 97在线视频 欧美| 久久资源网五月婷| 婷婷五月情天| 无码人妻AV久久久一区二区三区| 色婷婷偷拍| 精品视频99看在线视频| 碰97久久| yiqicaoav| 激情五月深爱五月| www久久久久久久97| 曰韩少妇内射免费播放| 婷色五月| www.91九色| 婷婷五月天手机版视频| 99色色| 69人妻人人澡人人爽久久| 99热香港| www.色五月| 99热国产婷婷| 色播播五月| 人与禽A片啪啪| 91婷婷丁香| 狠狠干 狠狠操| 色五月丁香网| 亚洲九区| 国产91视频| 婷婷五月激情综合网| 九九热免费观看视频| 伊人婷婷综合| 五月丁香色婷婷色| 99在线观看精品视频| 欧美人与性动交CCOO| 丁香五月综合激情性爱| 婷婷婷婷婷婷婷婷| 久久日韩婷婷五月| 激情综合色婷婷六月天| 精品自拍97| 婷婷六月插屄激情| 久久99精品视频| 五月婷婷狠狠干| 久久激情网| 五月天婷婷色综合| 欧美VA在线观看| 丁香香蕉射射射| 26uuu国产色| 开心激情网在线| 久婷久婷| 99热.com| 五月婷婷深深爱爱| 2025超碰| 日日夜夜婷婷| 九九青草热| 99精品综合| 99ri国产精品| 亚洲成人av在线播放| 久久密臀婷婷| 青青草原伊人网| 婷婷色五月天色| 色五月激情网| 激情综合啪啪| 六月婷婷综合| 男女久久婷婷五月天| 亚洲成人影视在线| 天天色色天天| 日韩在线视频中文字幕| 玖玖精品视频| 这里只有精品99www| 久草婷婷网| 26uuuuuuuu国产| 99玖玖视频| 91日日日| 天天日人人| 色综合77777| 五月激情综| 99玖玖人人| 成人电影在线免费试看| 華人性愛AV在線| 日本欧美成人片AAAA| 色狠狠图片| 青青草网武则天| 六月婷婷色色色| 久久五月视频| 伊人爱爱日本| www.zbzhongsen.com| 成人精品一区二区三区四区五区 | 亚洲激情av| 激情婷婷亚洲五月| 五月天激情啪啪| 五月天婷婷丁香| 五月婷久久在线| 狠狠爱婷婷丁香| 色情综合网| 丁香5月啪啪| 综合超碰熟| 亚洲免费看片| 99九九视频| 欧美激情综合| 色婷婷综合在线| 日本片日本片祼观看网站在线看中文版网页在线看 | 思思99热这里只有精品| 99精品综合在线| 婷婷丁香久久| 久狠狠狠| 精品免费99| 五月天激情影院| 老师高潮流白浆喷水的A片| 激情五月天小说网| 亭亭五月天黑人2014| 狠狠五月激情丁香六月| 亚洲欧美成人在线观看| 97干在线| 亚洲天堂热| 五月婷婷说| 99国产er热视频| 色色综合院| 专区无日本视频高清8| 色婷婷小说网| 可以直接看的AV网站| 狠狠舔| 婷婷趴趴| 成人在线观看一区| 色色五月天 亚洲| 亚洲天天操| 婷婷六月激情| 天天色亚洲| 五月天婷婷爱丁香中文字幕| 久操婷婷| 在线中文字幕av| 991自拍视频| 成人做爰高潮A片免费视频| 91超碰在线观看| 岛国AV网| 天天色亚洲| 丁香婷婷久久综合在线| 色狠狠综合网| www.狠狠干| 婷婷色综合| 97热精品| 五月停停999| 丁香六月婷婷久久亚洲天堂| 色婷婷很很丝袜| 久久精品99国产精品日本| 丁香六月综合激情| 亚洲五月婷| 先锋av性爱成人电影| 日本69日人视频| 日本久久超碰| 日韩 中文 欧美| 亚洲精品成人片在线播| www.综合久久| 91婷婷丁香| 五月丁香色婷婷久久| 丁香五月色| 婷婷成人丁香色情基地30 | 丁香五月天激情五月天激情五月天激情网| 亚洲AV久久久久久久久久久久久久久久| 日本五月婷婷| 亚洲色色图片| 激情图片久久| 激情98色婷婷五| 色久影院| 狠狠干思思热| 色婷婷五月天中文字幕| 国产精品成人网站| 日日做A爰片久久毛片A片英语| 女高怪谈在线观看| 色婷婷婷综合五月天| 久久99久久久久久久噜噜| 狠狠色综合网站久久久久| 天天射天天射一道本日本社区| A在线观看| 精品久久久91久久影视网| 182TV大香蕉| www。五月天。com| 六月丁香啪啪| 五月丁香婷婷婷激情爱爱| 91婷婷| 激情网五月天| 欧美激情综合色综合色| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 9999三级片| 欧美综合激情五月| 密黄站| 婷婷成人AV| 国产午夜精品一区二区三区四区| 激情九月婷婷| 五夜丁香| 色五月综合在线| 亚洲XX日本| 激情五月天婷婷直播| 五月婷婷综合影院| 99操不停| www.色多多婷| 久九男女天堂| 99精品在线观看| 色九月婷婷综合| 五月天成人小说网| 丁香五月天成人| 精品婷婷五月天| 色婷网| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 国产成人高清| 狠狠干综合| 亚洲人妻五月丁香婷婷| 婷婷丁香久久五月综合| 快乐婷婷五月天| 婷婷的99视频网站| 日本美女上人| 久婷婷| 中文字幕五月久久婷| 亚洲无码性爱| 亚洲精品第一国产综合亚AV | 色在线99| 久人操| 丁香五月WWW| 黄色av网站在线免费播放| 青青草视频免费观看| 91色色色| 蜜桃人妻无码AV天堂三区| 精品久久99| 婷婷性爱影院| 国产成人+综合亚洲+天堂| 色色色在线观看| 色偷偷五月天| 玖玖99免费视频| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 先锋资源91| 91se在线观看| 五月天婷婷爱| www.久久| 噜噜噜噜噜日本视频| 亚洲人人96@| 婷婷另类开心| 久久网思思| 日本激情五月天‘| 日本色爽| 色婷婷九月| 99爱在线精品视频免费观看| 色欲久久综合| 久久五月天激情| 香蕉曰比| 色婷婷五月综合在线| 性天堂久久| www99在线观看视频| 亚洲小电影在线观看黄999| 久久狠狠干| 欧美色婷婷| 4399在线观看免费高清电视剧| 婷婷丁香五月天综合网| 丁香婷在线| 国产午夜一区二区三区| 亚洲另类婷婷综合| 婷婷视频网| 最近免费中文字幕大全高清大全1| 亚洲V国产V欧美V久久久久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 热久久视频99| 色99视频| 色五月天综合网| 色五月丁香五月| 亚洲春色奇米影视| 五月丁香激情综合啪啪| 久久婷婷六月| 五月天婷婷激情小说电影| 在线观看亚洲AV| 亚洲国产精品VA在线看黑人| 综合网精品99| 成人短视频在线| 婷婷五月天伦理| 操人妻视频91| 六月丁香网| 国产99久| 丁香五月性| 欧美色小说婷婷| 九九無妻| 国产精品18久久久| 91打屁股视频网站| 国产欧美婷婷五月| 91黄操| 亚洲经典三级| 久婷婷五月综合欧美| 欧美va亚洲va| 天天干天天拍| 丁香网五月天| 大香蕉九九| 天天夜天天色天天| 久久婷婷六月综合| 黄色短视频在线观看| www.zbzhongsen.com| 天天综合亚洲综合| 婷婷综合激情| 超碰在线资源| 综合久色五月| 激情久久五月天| 综合久久五| 亚洲愉拍99热成人精品| 色婷亚洲| 99热在线观看| 色色色五月婷| 亚洲噜色| 91久久久久久| 久久综合影院| 丁香六月视频免费观看| 亚洲激情综合| 26uuu丁香婷婷五月| 天天干天天爽天天爽| 成人精品在线| 丁香五月婷婷Av| 五月婷六月丁香| 无码色色色| 久久丝袜婷婷| 五月天国产| 91婷婷视频| 77799热| 激情性爱五月天| 伊人玖玖综合| 五月天色婷婷网| 精品人妻伦一二三区久久| 色九月婷婷综合| 久久ab| 999热这里只有美国精品| 99婷婷五月天| 日日.c| 91色色色18| 色婷婷小说网| 色原狠狠综合| 日日夜夜狠狠操| 日韩AC在线免费观看| www.夜夜夜| 欧洲色色| 狠狠操.com| 亚洲天堂色色| 99热这里只有精品26| 91久久1118| 天天操天天曰天天射| 婷婷丁香色无五月| 天天日P天天射P| 久久这里有精品视频在线免费观看| 99噜噜噜在线播放| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 人妻丰满精品一区二区A片| 天天草人人摸| 五月激情啪啪| 丁香六月 人妻| 天天综合精品| 天天日夜夜夜操操操操| 亚洲亚洲人成综合网络| 99色热视频| 中文字幕日本最新乱码视频| 99在线看片| 婷色天堂| 五月婷婷自拍视频| 久久综合综合综合| 天天天天干| 婷婷欧美激情| 综合大香蕉| 亚洲综合成人网| 婷婷六月丁香五月| 五月天婷婷午夜丁香| 五月丁香婷婷色| 六月丁香婷婷色综合| 美女久久婷婷| 老司机日日夜夜青草| 五月天伊人久久久久| 人妻激情在线| 婷婷六月丁香在线| 江苏少妇性BBB搡BBB爽爽爽| 色色色色色色色色色999| 欧美,日韩成人在线| 久久这里都是精品| 激情久久五月天| 久久丁香五月婷婷| 色噜综| 大香蕉伊在| 色欲婷婷五月天| 激情q青青草在线婷婷| 天天碰夜夜操| 性色天| 日本色色网| 亚洲精品久久久久久久久久飞鱼| 丁香五月婷婷激情中文| 久久五月激情综合| 少妇AB又爽又紧无码网站| 九色色| jiujiujiuwuyuetian| 人人播| 99热只有这里才是精品| 色五月婷婷自拍| 亚洲九区| 婷婷伊人网| 五月婷婷六月丁香| 91狼友视频在线观看| 久99久在线观看| 这里只有精品,日韩视频| 天天色中文字幕女优AV| 99热在线精品播放| 99色播| 欧美人妻一区二区| 91色婷婷综合久久中文字幕二区| AV片一区在线观看| 丁香伊人网| 激情伊人六| 久久新| 伊人在线视频| 五月丁香婷婷综合久久| 99热精品综合| 综合久| 久久久久9久无码视频| 免费亚洲婷婷中文字幕| 思思热久久久久思思热| 国产综合色婷婷精品久久| 麻豆WWWCOM内射软件| 久久久27操| 亚洲第精品| 亚洲无线视频| 久热re视频在线观看网站| 99碰碰| 99热免| 激情丁香淫荡婷婷| www.91.com黄| 婷婷六月久久| 极品少妇XXXX精品少妇偷拍| 91色涩| 五月激情网综合| 五月天六月丁香| 天堂成人久久| 婷婷综合国产| 成人做爰高潮A片免费视频| 色吧婷婷| 无码人妻一区| 天天久久综合| 色五月丁香五月激情五月激情| 日韩一级网站| 久久婷婷五月综合色和| 天天综合精品| 五月天激情久久| 六月丁香中文字幕| 色色色9| 久久99热精品a片在线观看| 色视频2025| 亚洲综合色色| 蜜臀av粉嫩av懂色av| 婷婷不卡基地| 婷婷香蕉精品| 中文幕无线码中文字蜜桃| 丁香五月电影| 丁香婷婷九月| 久久精品系列| 十一月婷婷激情四射| 国产乱妇乱子伦| 激情五月综合色婷婷| site:pzdcoin.com| 色婷婷狠狠18禁| 国产成人高清| 国产av基地| 超碰人人99| 毛v一区二区视频| 996黄色片| 丁香五月玖玖| 午夜在线成人网站免费观看| 婷婷最新地址| 丁香五月天堂婷婷| 大香蕉在九| 中文字幕日本最新乱码视频| 久草热久草在线视频| 97久久视频| 精品人妻伦一二三区久久| 九九人人操| 狠狠操狠狠插| 国产精品日本一区二区在线播放 | 色偷偷综合| 激情五月天com| 五月婷亚洲精品| 色综合色色色| 丁香五月综合| 97在线视频人妻九色| 天天久久狠狠色综合| 色五月首页| 五月天狠狠| 色综合色| 欧美婷婷色| 免费色婷婷| 日本在线视频看se99| 色婷婷AⅤ| 中文字幕综合| 99视频色在线观看| 99热国产在| 99热99这里有免费的精品| 五月色丁香激情| 亚洲天堂aaa| 五月天伊人| 久久伊人大香蕉| 久久婷婷亚洲| 丁香情色五月| 五月天婷婷综合| 色天堂在线| 丁香六月欧美| 人妻日日日| 人人草碰| 97碰超级人人看| WWW丁香五月| 丁香激激情网| 97操碰在线视频| 67194国产| 第四色在线观看| 91人人妻人人操人人爽| 久99在线视频| 久久99激情| 亚洲aV写真天天综合网久久| 国产成人高清| 强壮公让我夜夜高潮A片视频| 久久九久久| 色情婷婷。| 五月天婷亚洲综合在线嫩草网| 精品久久久久久久人妻| 91丁香五月| 性一交一乱一交A片久| 天啪天啪天啪天啪| 五月天丁香网| 综合六月激情婷婷| 中文字幕不卡+婷婷五月| 五月丁香啪啪啪| 人妻中文av| 六月五月丁香五月欧美| 97婷婷五月天| 五月开心激情| 天天操天天插天天射| 91婷婷在线| 丁香六月天色婷婷| 99在线资源| 日韩在线观看网址| 任你日视频| 久热最新视频| 久久久WWW| 色情终和网| 97色久| Jh7Uf088VHafNm| 色综合久久99色| 青草视频在线播放| 久操激情| 综合激情深爱| 99这里只有| 婷婷不卡基地| WWW色五月天| 这里有精品| 日日噜噜夜夜狠狠久久丁香五月| 日本熟妇精品99| 狠狠色婷婷六月激情网| 激情五月婷婷五月| 午夜婷婷久久 | 色综合爽| 五月狠狠| 亚洲综合视频八| 九九家庭影院| aa久久| 激情五月婷色| 丁香五月婷婷色五月| 亚洲网站999| 好大好粗嗯啊-一级黄色大片免费观看-成人AV | 国产成人高清| 日本人人xxx| 色网五月婷婷| 激情涩涩网| 丁香激情网| 色五月天丁香婷婷色| 久久人人人人妻| 日产精品一线二线三线芒果 | 婷丁五月| 丁香九月激情| 99精品97| 夜夜骑夜夜撸| 免费色婷婷| 五月天色婷婷小说| 五月天激情小说| 91爱操| 中文字幕丰满人妻无码专区| 99ri视频在线观看| 热99精品视频| 五月天色色无码| 开心婷婷五月天电影院| 日日日日日| 91精品久久久久久综合五月天| 五月婷婷成人| 海外网站专业操老外| 婷婷五月综合激情免费| 97干在线视频精品店| 综合狠狠干| 日产精品一线二线三线芒果| 婷婷香香五月| 久久综合五月| 超碰免费在线| 婷婷六月色| 超碰人人干| 综合色图区| 五月丁香精品| 亚洲综合婷婷| 97色色婷婷| 四色99久久| 婷婷丁香五月天哟啪| 色婷婷五月综合| 婷婷激情五月| 丁香五月天电影| 丁香五月综合高清在线| 特级西西4444www无码| 激情综合五月婷| 五月天婷婷无码| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 五月丁香激情综合网| 五月丁香激情五月天| 99热婷婷| 日韩av干| 99热传媒| 开心色五月天久久久久久久| 96丁香六月婷婷蜜桃综合久久| 亚洲99一级无嗎特制在线| 丁香六月无码播放| 9超碰在线| 欧美日韩成人免费在线| 日韩成人中文字幕| 26uuu国产| 国产va在线视频| 久久se 综合网 | 五月激情综合婷婷| 五月色综合网| 久99久在线观看| 欧美一级色| 久久综合热17c| 天天日天天久久青青| 影音先锋777xfplay色资源网站| 综合久久久婷| 日韩无码专区| 久久综合热17c| 伊人狼人干| 狠狠色噜噜狠狠狠狠综合| 久久婷婷色情7777网站| 婷婷五月天伊人| 深爱丁香激情| www,超碰| 婷婷狠狠操| 五月花婷婷最新| 99热一本久道| 欧美人妻一区二区| 久久婷婷欧美| 99热碰碰| 99色色网| 丁香五月激情啪啪| 久久久8| 青草青草视频2免费观看| 99热亚洲精品| 大香蕉婷婷| 97日韩无套内| 精品99在线| 久久aaa| 中文字幕在线不卡视频| 五月丁香综合| 嫩BBB槡BBBB搡BBBB视频| www色综合亚洲92| 激情综合网五月天| 99热在线观看亚洲区| 99热亚洲| 精品欧美性爱超级爽| 欧美日韩成人高清在线| 一區四區歐美日韓| 99啪在线| 99网| 欧美成人日韩| 五月色婷婷综合丁香精品无遮挡| 日本在线wwww| 丁香六月激情| 夜色综合网| 婷婷成人丁香色情基地30 | 五月情丁香色| 国产免费av在线| 亚洲蜜桃精久久久久久久久久久久| www.99视频| 五月天合网| 99超碰在线观看| 51精品国自产在线| 99色天堂| 五月色丁香视频精品| 99爱视频精品| 99热很操老逼| 狠狠干综合| 色五月婷婷在线| A A色色| 婷婷激情五月吧| 五月婷婷九| 色色色激情网| 中文av网站| 五月激情在线| 视色综合| 日本的α片xxxwww| 原琪琪色影院| 色色草97| AⅤ网站在线看| 欧美日韩91| 激情图片五月天| 深爱激情久久| 天天肏屄夜夜爽| 亚洲av综合网| 亚洲天堂无码| 亚洲成人AV一区在线观看| 香蕉AV福利精品导航| 丁香五月首页| 国产偷人妻精品一区| 色情播放| 99无码免费视频| 97av在线视频| 99狠狠操一| 色婷婷91激情小说| 影音先锋自拍网| 日本天天操| 久热这里只有精品6| 丁香六月激情| 亚洲色色色| 综合五月婷婷| 夜夜操激情| 五月丁香婷中文字幕 | 激情婷婷久久| 伊人玖玖综合| 激情色情五月天| 国产AV成人精品| 婷婷五月天97干| 亚洲乱码日产精品BD| 丁香五月婷婷基地| 久久香蕉网| 亚洲精品国产成人AV在线| 五月天成人免费视频| 丁香五月瑟瑟| 97干在线视频精品店| 亚洲精品第一色色色色色色| 国外亚洲成AV人片在线观看| 激情四射五月天| 99热这里有精品| 99热6精品| 5月丁香啪啪啪| 五月婷婷中文字幕| 婷婷五月天成人网| 日韩九区| 婷婷激情综合| 久久久婷婷婷| 1024人妻| 婷婷色五月天在线| 色五月AV| 99热这里只有精品8| 色婷婷视频| 99热| 老妇六区| 九月停停| 国产亚洲成AV人片在线| 一区二区三区四区牛| 久久九九九九| 丁香婷婷色九月| 五月丁香操婷逼| 久久伊人大香蕉| 激情五月丁香婷婷夜夜操| 久久视这里只有精品| 激情五月天噢美| 99色看这里只有精品| 婷婷五月天,影院| 日日日影院| 日韩五月丁香| 五月婷婷综合久久| 99精品在线观看视频| 久9久9久9久9久9久9| 五月天啪啪视频| 丁香五月成人社区| 国产乱妇无乱码大黄AA片| 狠狠精品干练久久久无码中文字幕 | 日本一级| 激情五月黄色小说| www.思思99热| 婷婷五月另类网站| 综合网激情| 亚洲1区| 无码人妻少妇色欲AV一区二区| 亚洲天堂婷婷丁香| 自拍视频在线观看9| 99九九综合久久九九| 丁香色五月婷婷17C| 夜夜夜夜操| 丁香五月婷综合网| 91视频一起草| 99re在线播放| 综合 蜜月 婷婷| 另类图片色五月| 亚洲成人色五月婷婷综合| 天天热夜夜操| 激情 婷婷| 狠狠操狠狠操| 色欲五月丁香| 亚洲色激情| WWW丁香五月| 黄色AAAAA| 99热超碰在线| 91日在线视频| 丁香五月AV| 综合激情网五月激情| 欧美英丁香开心快乐六月天网| 五月丁香六月婷婷姐| 综合久| 丁香五月婷婷啪啪视频| 99riAV国产精品视频| 五月天天天开心激情网| 成人免费va| 婷婷色六月| WWW久久99久久99久久| 婷婷六久久| 久操激情| 婷婷五月天激情综合网| 亚洲天堂爱爱| 91中文狠狠综合| 久久婷婷色情7777网站| 天天综合色综合| 97干网站| 五月婷婷视频| 日日噜狠狠| 人人草人人视| 99啪啪| 日韩精品一曲二曲三曲四曲五曲| 久久er视频6| 六月婷婷久久| 亚洲超碰在线| 久草狼人| 丁香五月在线视频黑人| 激情色色| 日韩aⅴ视频| 涩综合在线 | 黄色片区子| 久久 视频这里只有精总| 婷婷五月天综合网| 99亚洲精品综合在线| 婷婷五月激情网站| 婷婷五月婷婷| 中文幕无线码中文字蜜桃| 色色五月天婷婷丁香| www.色五月天.com| 日本久久天堂| wWW九九在线播放| 久久久久久五月天| 97色在线| AV动漫不卡无码免费| 人人操人av| 国产亚洲精品久久久久久牛牛| 狠狠干无码| 棕合影院色色| 日本AAAAAAAAAAAAAA片| 日日色综合| 亚洲成人另类| 亚洲热久久| 丁香五月婷婷综合啪啪| 99色色网| 激情av在线| 五月丁香亭亭A片| 激情的五月| 久机视频这只有精品| 97电影99热| 婷婷五月亚洲一本在线丁香| 人妻熟女一区二区AV| 日本片日本片祼观看网站在线看中文版网页在线看 | 五月天社区| 亚洲操精品| 97久久五月丁香婷婷| 久久99美女精彩视频| 日韩一本操| VA国产在线综合网站| 天天爽天天日| 大香蕉婷婷色| 五月婷中文字幕| 九九精彩久久| 最新va在线播放| 天天久久婷婷| 久久婷婷五月天亚洲欧美| av免费在线看不卡无毒| 538久久| 五月天色五月| 丁香五月婷婷狠狠色| 爱射综合| 婷婷五月成人| 色婷婷免费观看| 超碰com| 操操人人| 九九亚洲综合| 99热在线精品观看| 99热亚洲| 色婷婷综合网站| 久草天堂| 91chinese在线| 丁香五月影院| 色偷偷五月天| 色很很96| 激情综合五月天| 激情五月综合视频| 欧美电影在线播放| 激情五月婷婷在线区| 亚洲日韩乱码一区二区三区四区| 久久aaa| 成人美女网| 五月天色婷婷基地| 青草青草视频2免费观看| 26uuu亚洲欧美另类| 欧美婷婷丁香社区在线播放| 久久久久久五月天| www。久久久久一b。Cc| 热久久视频99| www.九月婷婷丁香.com| 人人草开心五月天| 久草婷妨| 激情綜合W W W,激情五月天| 丁香综合久久| 婷婷久久五月天丁香| 日本欧美在线| av九九| 五月天伊人日日噜影片AV| 国内精品免费一区二区2009| 深爱五月激情| 成人免费在线电影| 久久久www| 91精品熟女| 影音先锋男士资源网一区| 色五月女| 91精品综合久久婷婷九色| 久热这里只有精品99re | 丁香五月在线播放| 六月丁香婷婷色综合| 久久久色情| 五月天堂婷婷| 五月天色婷婷av| 五月丁香 狠狠爱| 久久激情五月天| 五月婷婷色男女| 久久九九一區| 婷婷亚洲综合| 美臀自射自家人妻| 99玖玖精品| 丁香六月五月天| 欧美Va在线| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 99热只有精品综合| 激情又色又爽又黄的A片| 亚洲婷婷免费| 精品视频这里只有精品| 超91热| 91超碰人人操| 五月综合在线婷婷图片| 激情久久综合网| 色五月婷婷久久| 26uuu| 开心丁五月| 91/九色黑人| 欧美日韩aaa| 五月婷婷 激情五月| 五月激情丁香五月| 9 9 9色色| 99色在线视频|