亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(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)物能干干凈凈地單獨部署的時候編譯一個libiconv的靜態(tài)庫就成了最省心的方案。這篇文章就圍繞“在macOS、Windows以及Windows下的MinGW環(huán)境中分別編譯libiconv靜態(tài)庫”這件事把我在實際項目里踩過的坑、試過的參數(shù)、驗證過的產(chǎn)物整理出來。不管你是要給某個跨平臺數(shù)據(jù)處理工具準備底層庫還是只想擺脫Windows上缺乏原生iconv的窘境這篇都能給你一條可以直接照著走的路徑。先說清楚我要做什么libiconv是GNU提供的字符編碼轉(zhuǎn)換庫接口簡單核心就是iconv_open、iconv、iconv_close這一組函數(shù)。Windows下沒有官方的iconv實現(xiàn)MSVC環(huán)境通常用第三方移植版或者干脆自己封裝而macOS系統(tǒng)自帶的iconv實際上是libiconv的舊版本但頭文件和鏈接庫的位置不算特別規(guī)矩如果你要帶一套固定版本的庫隨程序發(fā)布或者要交叉編譯給某個嵌入式目標自己動手編譯靜態(tài)庫幾乎是必須的。MinGW則是Windows上另一條常用路線用GCC工具鏈編譯出原生Windows程序這時候libiconv的靜態(tài)版本同樣能幫我們避免一堆DLL加載問題。整個文章的核心思路是這樣的不繞彎子三種場景分開講每個場景都給出完整命令、關(guān)鍵參數(shù)的含義、以及我實測過能用的產(chǎn)物驗證方法。中間還會穿插我在某跨平臺項目中遇到的實際報錯和排查過程這部分內(nèi)容普通文檔里不會寫但往往才是真正卡人的地方。1. 為什么非要用libiconv靜態(tài)庫1.1 Windows和macOS上的iconv到底有什么坑先說Windows。很多人第一反應(yīng)是Windows不是有MultiByteToWideChar和WideCharToMultiByte嗎確實有但那兩個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又變了一副面孔。這就是為什么跨平臺項目幾乎清一色選擇libiconv它把編碼轉(zhuǎn)換統(tǒng)一成一個抽象層一份代碼在所有平臺行為一致。再說macOS。macOS確實自帶iconviconv.h在系統(tǒng)SDK里也能找到直接#include iconv.h然后鏈接-liconv似乎就行了。但這里有個隱蔽的問題macOS自帶的iconv版本更新節(jié)奏非常慢且Apple對它的自定義改動不少具體行為未必和GNU libiconv完全一致。比如某些邊緣編碼的轉(zhuǎn)換差異、錯誤處理方式、線程安全問題踩到了就很頭疼。如果項目里需要確保所有平臺使用同一個iconv實現(xiàn)版本而不是“隨系統(tǒng)心情”那就必須自己編一份靜態(tài)鏈接進程序。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文件吃進去最終產(chǎn)物就是一個獨立的可執(zhí)行文件復(fù)制到任何同架構(gòu)的機器上都能直接運行不需要關(guān)心目標機器上有沒有對應(yīng)的動態(tài)庫、版本夠不夠新。其次靜態(tài)鏈接能讓最終程序的行為更可控。動態(tài)庫的版本由運行環(huán)境決定今天編譯時用的符號在這個版本上存在用戶機器上的老版本庫可能根本沒有這個符號或者行為完全不同。而靜態(tài)庫把實現(xiàn)完整鎖進產(chǎn)物里源代碼是什么版本運行就是什么版本。對講究可復(fù)現(xiàn)、需要長期維護的項目來說這個優(yōu)勢非常關(guān)鍵。這里補充一個我的經(jīng)驗靜態(tài)鏈接也有代價體積會增加、多個庫之間可能有符號沖突、安全更新時不能只替換動態(tài)庫。但如果權(quán)衡部署穩(wěn)定性和行為一致性libiconv這種小而穩(wěn)定的庫靜態(tài)鏈接幾乎是當下最平衡的選擇。2. 編譯前必須理清的三個平臺差異2.1 源碼與構(gòu)建體系先認識GNU autotoolslibiconv的源碼包雖然是GNU項目但真正拿到手后發(fā)現(xiàn)它不止是“一堆C文件”而是基于autoconf/automake組織的一套標準構(gòu)建體系。解壓后你會看到configure、Makefile.in、config.h.in這些文件。它的構(gòu)建邏輯是先運行./configure探測當前系統(tǒng)的編譯器、頭文件、庫特性生成對應(yīng)的config.h和Makefile再執(zhí)行make編譯。這點很重要因為Windows原生環(huán)境下沒有一個“標準shell”來跑configure腳本我們得想辦法讓這套autotools體系在Windows上活過來。三個平臺的實際差異主要集中在三處終端與shell環(huán)境、編譯器選擇、以及生成的目標格式。下面這個表格幫大家快速對照平臺/場景默認終端常用編譯器生成目標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 工具鏈準備不同場景該裝什么macOS側(cè)只需要一個Xcode Command Line Tools。打開終端執(zhí)行xcode-select --install裝好就有clang、make、ar、ranlib這些基礎(chǔ)工具。要注意的是別用系統(tǒng)自帶的/usr/bin/make版本太老的問題實際用下來預(yù)裝的GNU Make 3.81編譯libiconv完全夠用不需要額外裝新版本。Windows MSVC路線有兩套準備方式。一是裝完整版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的人。我自己的項目用的是Build Tools路線因為構(gòu)建服務(wù)器上不需要圖形界面。Windows MinGW路線準備方式得細說。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)境備齊。這里強調(diào)一下MSYS2里有兩套環(huán)境MSYS環(huán)境編譯出來的東西依賴MSYS運行時MINGW64環(huán)境編譯出來的才是純Windows原生程序。我們做libiconv靜態(tài)庫必須在MINGW64環(huán)境中操作。2.3 靜態(tài)庫的產(chǎn)物形態(tài)與命名差異編譯完成后三種環(huán)境下得到的靜態(tài)庫文件名和格式都不同先建立這個預(yù)期后面驗收時就能對號入座。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雖然擴展名和macOS一樣但格式是COFF只能給MinGW的GCC鏈接器用。這三種格式互不通用這點必須牢記給MSVC工程用的庫不能拿MinGW編出來的.a去糊弄。3. 實操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這里建議單獨建一個output目錄把編譯結(jié)果統(tǒng)一放進去。因為默認的configure會把頭文件和庫文件安裝到/usr/local我不想污染系統(tǒng)的/usr/local更希望所有產(chǎn)物都收納在當前工程目錄里方便后續(xù)打包。mkdir -p /tmp/libiconv-macos/build-output實際開發(fā)中我習(xí)慣在工程目錄內(nèi)建third_party/libiconv-macos這樣做的好處是第三方庫和項目源碼一起納入版本管理新同事拉下來不需要額外裝庫。不過這只是目錄組織的偏好核心編譯命令不變。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。這相當于一個“本地虛擬安裝”不碰系統(tǒng)目錄。--disable-shared明確禁止生成動態(tài)庫只生成靜態(tài)庫。libiconv默認會同時編靜態(tài)和動態(tài)如果不禁用動態(tài)庫你會看到一堆.dylib文件那不是我們想要的。--enable-static雖然默認靜態(tài)庫就是啟用的但顯式寫出來可以讓configure腳本的人一眼看懂意圖。CCclang指定編譯器。macOS上默認CC可能是cc它其實是指向clang的但顯式指定更穩(wěn)當。CFLAGS-O2 -arch arm64-arch arm64是針對Apple Silicon的如果是在Intel mac上編譯去掉這個參數(shù)或者改成-arch x86_64如果希望生成通用二進制可以寫-arch arm64 -arch x86_64但要注意那樣生成的.a是胖二進制體積會增大多數(shù)場景其實只需要當前架構(gòu)。3.3 make與產(chǎn)物驗證接下來執(zhí)行make -j8 make install-j8用8個并行任務(wù)編譯速度會快不少。如果機器配置一般改成-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描述文件實際鏈接時用不到。頭文件方面include/iconv.h是我們要的東西include/libcharset.h是輔助頭通常不用直接引入。驗證一下庫里的符號nm /tmp/libiconv-macos/build-output/lib/libiconv.a | grep _iconv_open看到_iconv_open和_iconv這幾個符號就說明編譯成功了。這里加下劃線是Mach-O的C符號命名規(guī)則在Windows的COFF里沒有這個下劃線前綴驗證時不要對照錯。這一步我在某跨平臺終端工具中實際跑過一次整套下來不到兩分鐘。macOS下libiconv的編譯是三條路線里最順的主要原因是autotools體系本來就是為Unix-like系統(tǒng)設(shè)計的在這個環(huán)境里幾乎不會出幺蛾子。4. 實操Windows上的兩種編譯路線4.1 MSVC原生編譯讓autotools在Windows shell里干活MSVC路線麻煩一些因為configure是個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)境中運行但編譯器仍然指定為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這樣進入bash后環(huán)境變量繼承了當前CMD里的MSVC變量。然后在bash里進入源碼目錄執(zhí)行configure./configure --prefix/tmp/libiconv-windows-msvc \ --disable-shared --enable-static \ CCcl CFLAGS-O2 -MT這里CCcl是關(guān)鍵直接把編譯器指向MSVC的cl.exe。-MT參數(shù)讓運行時庫使用靜態(tài)版這樣最終exe不依賴msvcp140.dll、vcruntime140.dll這些動態(tài)運行庫程序復(fù)制到別的Windows機器上更容易跑起來。然后構(gòu)建時不能用make因為autotools生成的Makefile里寫用的是make而MSVC環(huán)境下更好用的是nmake。實際操作中我見過有人直接用make也過了因為Git bash環(huán)境里帶了GNU Make它也能解析autotools生成的Makefile但最終調(diào)用CC時用的是cl所以核心還是MSVC工具鏈。穩(wěn)妥起見建議這樣執(zhí)行make -j8 make install如果中間報nmake相關(guān)的錯誤或者Makefile語法問題可以嘗試把make改成用nmake -f Makefile.msvc但libiconv官方實際上沒提供完整的MSVC專用Makefile多數(shù)情況還是要走autotools生成的Makefile。實測Git bash里用GNU make是最順的方案。產(chǎn)物驗證時檢查/tmp/libiconv-windows-msvc/lib目錄會得到iconv.lib和charset.lib兩個文件。用dumpbin /symbols iconv.lib如果能列出iconv_open等符號說明庫沒問題。注意MSVC的靜態(tài)庫沒有.a擴展名鏈接時直接在Project屬性里加上這個iconv.lib即可。這一步我印象很深最初一直以為MSVC下必須手工寫DEF文件或者用第三方預(yù)編譯包繞了好大一圈才發(fā)現(xiàn)autotools在Git bash cl的組合下就能直接工作關(guān)鍵是CCcl變量別被bash默認的gcc覆蓋掉。4.2 MinGW編譯最省心的一條Windows路線MinGW路線的體驗是真的好很多因為MSYS2環(huán)境天然就是Unix風(fēng)格的shell。打開“MSYS2 MINGW64”終端注意不是MSYS終端確認gcc -v能看到x86_64-w64-mingw32-gcc然后進入源碼目錄直接執(zhí)行./configure \ --prefix/tmp/libiconv-mingw64 \ --disable-shared \ --enable-static \ CCgcc CFLAGS-O2 -static-libgcc -static-libstdcMinGW下GCC默認鏈接libgcc的某些部分還是動態(tài)引入的如果希望最終exe完全獨立運行-static-libgcc能避免對libgcc_s_seh-1.dll的依賴。libiconv的源碼本身是純C不依賴libstdc但加上這個參數(shù)能防止后續(xù)自己的項目里鏈接了C代碼時被動態(tài)庫問題偷襲。當然如果項目里沒有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不能交叉使用。驗證符號時使用nm /tmp/libiconv-mingw64/lib/libiconv.a | grep iconv_openMinGW的COFF符號不像MSVC那樣帶下劃線前綴但nm輸出中可能顯示為T iconv_open、T _iconv_open這是因為MinGW內(nèi)部對符號名做了修飾實際鏈接時用-liconv就行了不需要你手動處理前綴問題。我在某個Windows數(shù)據(jù)采集客戶端里用的就是這套MinGW編譯的靜態(tài)庫配合-static和-static-libgcc最終exe在幾臺沒裝任何運行庫的干凈Windows測試機上都能直接跑起來效果很理想。4.3 兩種Windows路線的選擇建議MSVC和MinGW兩條路線各有領(lǐng)土不是一個替代另一個的關(guān)系。如果項目主工程是Visual Studio解決方案那肯定選MSVC編譯的iconv.lib因為VS工程無法直接鏈接MinGW的.a文件。反過來如果項目用CMake且工具鏈是MinGW或者你在做跨平臺腳本構(gòu)建MinGW路線更合適因為它的構(gòu)建過程幾乎無摩擦。另外有一點需要提醒很多在線教程會直接讓你下載別人編譯好的iconv.dll或libiconv.a塞進項目里這種做法在個人小工具里可能行得通但放到正式產(chǎn)品里會埋雷。來源不明的二進制無法保證和源碼版本一致、無法復(fù)現(xiàn)構(gòu)建過程也說不清有沒有被人動過手腳。自己走一遍編譯流程并不難卻能把這些問題一次解決干凈。5. 典型編譯報錯與排查實錄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ā)”工作負載確保Windows SDK組件已經(jīng)裝上。5.2 編譯到一半卡在某個源文件如果報錯說某個.c文件找不到頭文件比如stdlib.h或stdio.h多半是頭文件搜索路徑?jīng)]配好。MSVC環(huán)境下要確認環(huán)境里執(zhí)行過vcvars64.batMinGW環(huán)境下要確認mingw-w64-x86_64-gcc以及配套的頭文件包已經(jīng)裝好。MSYS2可以用pacman -S mingw-w64-x86_64-gcc和pacman -S mingw-w64-x86_64-headers來補齊。c89/c99標準相關(guān)的warning不用怕舊版本的libiconv源碼用的是老式C風(fēng)格在GCC的新版本下會刷出一堆declaration warning不影響生成目標代碼。只要沒出現(xiàn)error讓它編完就好。5.3 鏈接階段的最典型翻車現(xiàn)場我記得在某跨平臺圖像處理Demo里接過這樣的報錯cannot find -liconv排查方法很簡單確認libiconv.a真的存在于指定的-L目錄中且文件名沒有拼錯。GCC的-liconv默認尋找的是libiconv.a或libiconv.so。如果你把文件命名成iconv.lib那MinGW的GCC是找不到的必須改名或者在CMakeLists里顯式指名-l:libiconv.a。還有一個MSVC下容易踩的坑鏈接iconv.lib時報LNK2001外部符號無法解析比如_iconv_open無法解析。原因往往是頭文件部分已經(jīng)通過MSVC編譯但編譯器實際生成的符號名和你用頭文件聲明的不同。最常見的是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)庫里實際導(dǎo)出的符號名來確認。5.4 看似成功但運行時行為怪異這個坑很少人提但很陰編譯出的靜態(tài)庫本身沒問題鏈接也成功但程序運行到字符轉(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確認工具鏈環(huán)境C compiler cannot create executables缺SDK鏈接庫重新安裝Visual Studio組件或MinGW-w64依賴包找不到iconv.h頭文件搜索路徑未包含include目錄-I指向build-output/includecannot find -liconv庫文件不在-L路徑或命名不對確認libiconv.a存在且文件名正確MSVC下LNK2001符號無法解析編碼名宏沖突或者靜態(tài)庫與編譯器格式不匹配檢查iconv.h宏定義用dumpbin查看庫的實際符號運行時返回EILSEQ編碼名不被識別用iconv -l查官方支持的編碼名鏈接成功但exe缺DLL編譯時沒開-static或-MTMinGW加-static -static-libgccMSVC用/MT6. 把靜態(tài)庫接進項目的幾個實際建議6.1 頭文件與宏定義的正確搭配使用靜態(tài)庫時編碼轉(zhuǎn)換代碼里的頭文件寫法要注意#include iconv.h但如果你的項目同時可能接觸到系統(tǒng)自帶的iconv需要重點審視iconv.h里L(fēng)IBICONV_PLUG這個宏。這個宏存在是為了做兼容層設(shè)計當系統(tǒng)已經(jīng)有一個iconv時可以通過定義LIBICONV_PLUG讓libiconv使用系統(tǒng)iconv的符號名但當我們靜態(tài)鏈接自己編譯的libiconv時通常不需要定義這個宏直接讓libiconv把自己的iconv_open等符號暴露出來即可。為了避免符號沖突libiconv其實把實際導(dǎo)出符號定義成了libiconv_open等帶前綴的名字然后通過宏在頭文件里映射成iconv_open。這意味著如果你同時鏈接了其他也提供iconv_open的庫就會出現(xiàn)重復(fù)定義或者符號被覆蓋。解決思路是在編譯自己的C文件時統(tǒng)一使用#define LIBICONV_PLUG或統(tǒng)一不定義并確保所有源文件使用同一個iconv.h頭文件不要讓不同編譯單元各看各的頭文件。這一點在大型項目里尤其重要分散在多個CMakeLists里的子項目很容易出現(xiàn)“有的編譯單元用系統(tǒng)頭有的用libiconv頭”的混亂局面。6.2 CMake集成示例如果是CMake工程以下是我實際在用的模板支持三個平臺自動選擇對應(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í)行文件不依賴運行時DLL。這屬于工程級配置和libiconv本身無關(guān)但直接決定最終產(chǎn)品能否“一個exe走天下”。6.3 統(tǒng)一的二進制符號處理在Windows上如果你同時使用MSVC編譯的某個庫和MinGW編譯的libiconv那么至少要確認所有庫都是用同一套C運行時編譯的。MSVC有/MD動態(tài)運行庫和/MT靜態(tài)運行庫之分MinGW有-static和動態(tài)之分混著鏈接輕則鏈接告警重則運行時崩潰。最省心的策略是整個項目統(tǒng)一用靜態(tài)運行時MSVC每個編譯單元都加/MTMinGW統(tǒng)一加-static -static-libgcc。這樣它們之間的內(nèi)存管理、CRT啟動邏輯才能保持一致否則一個庫在A運行時里malloc、在B運行時里free結(jié)果往往是一聲不吭地崩掉。7. 關(guān)于編譯性能與庫體積的補充思考靜態(tài)庫寫進exe之后體積增幅是很有限的。我實測libiconv 1.17在MinGW編譯、O2優(yōu)化下libiconv.a大約幾百KB鏈接進exe后最終二進制增幅也就在百KB級別。對現(xiàn)代程序來說這點體積完全可以接受。但如果你的場景極度敏感可以考慮裁剪編碼支持在configure時指定--enable-extra-encodings之類的參數(shù)或者編譯后手工裁剪不需要的編碼表。不過這不是常規(guī)操作而且libiconv的編碼數(shù)據(jù)多半是靜態(tài)表裁剪收益不大風(fēng)險卻不小——真用到被裁掉的編碼時你根本想不到是這個原因。所以我個人建議保持默認全量編譯省心最重要。編譯速度方面三個平臺基本都在分鐘級以內(nèi)幾乎不構(gòu)成工程瓶頸。反而是版本升級和重新編譯的流程更容易被忽視update libiconv后務(wù)必同時更新三個平臺的靜態(tài)庫和頭文件避免Mac上用了新版、Windows還在用舊版結(jié)果同一套源碼在兩邊行為不一致。這種跨平臺差異類bug比編譯錯誤難查一個數(shù)量級。8. 一些經(jīng)驗總結(jié)與避坑心得走了這幾輪編譯流程幾個體會非常深。第一別小看環(huán)境變量和路徑問題。三套路線的大多數(shù)報錯都集中在“工具鏈沒在這個終端里生效”而不是代碼本身。每次編譯前先在終端里執(zhí)行which gcc、cl或xcode-select -p確認工具鏈在位能省掉大量看起來莫名其妙的報錯。第二不同平臺的產(chǎn)物命名差異要提前接受。macOS下的libiconv.a、MSVC下的iconv.lib、MinGW下的libiconv.a文件名只是表象真正要緊的是靜態(tài)庫格式和符號規(guī)則。把它們按平臺放進不同的third_party目錄用CMake或類似構(gòu)建系統(tǒng)做平臺分支才是最省力的管理方式。第三不要用網(wǎng)上隨手下載的預(yù)編譯庫替代自己編譯。并不是說所有第三方預(yù)編譯包都有問題而是你無法確認它的編譯參數(shù)、版本和完整來源這在正式項目里引入的風(fēng)險完全不值得。自己編譯的靜態(tài)庫至少你清楚它來自哪個版本源碼、用了什么CFlags、包含哪些模塊。第四碰到奇怪的鏈接錯誤第一步永遠是nm或dumpbin查看靜態(tài)庫的真實符號不要憑頭文件猜。頭文件里的宏映射和實際導(dǎo)出符號之間的偏差是這類工作里最棘手也最常見的坑。最后再分享一個小技巧編譯好的三個平臺靜態(tài)庫和頭文件我會連同源碼版本號一起歸檔在項目倉庫的third_party/libiconv-1.17目錄下目錄內(nèi)放一個README.md記錄每套庫的編譯時間、編譯器版本、configure參數(shù)。三個月后再來維護這個項目或者有新同事接手看到這份記錄能省下大把重新摸索的時間。跨平臺靜態(tài)庫這活兒本身的編譯時間不長真正容易出問題的全是“當時沒記錄下來的細節(jié)”。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
www.婷婷| 9长久久精品| 久久精品国产99国产精品亚洲| 久久九九热| 亚洲,日韩,欧美,成人播放| 蜜臀久久99精品久久综合| 99re在线精品78| 久久欲| 清纯唯美激情四射| 日本乱人伦片中文三区| 欧美亚洲玖玖玖| 国产成人精品网站| 天天摸天天插天天日| 久久久四区| www.夜夜操| 哈哈操 大香蕉| 国产热RE99久久6国产精品首| 蜜桃臀一区二区aV| 午夜男女爽爽爽在线视频| 国产第二页| 天天视频黄网站| 国产欧美日产一区二区三区 - 国产欧美日 | 成人 日本A片无码8888| 中文一区二区| 99久在线精品99re8热| 天天操天天干美女网址导航| 99久久久久| 久久精品成人| 91在线综合网| 日韩欧美中文| 熟女91网站| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 日本不卡码黄色 | 天天综合网视频91| 99在线精品视频| 97视频免费播放| 欧美淫穴| 影音先锋中文字幕日本好一区二区| 色欧洲97| 日本三级韩国三级99| 国产精品一区二区手机看片| 色香在线| 丁香五月激情婷婷| 一区操逼| 97久久久久久久久久| ..日韩av毛片精品久久久| 久久婷婷五月天| 国产激情视频一区区三区| 四虎影库国产精品免费| 无码聚合| 人妻一区二区三区视频| 超碰97COm中文| 久久一二三四不卡 | 91操人视频| 极品另类| 丝袜AV一区二区三区| 九九九九88| 久久黄色性爱视频| av无线看| 91人人| 欧美午夜色妇色鬼| 人人色97| 青草青草久热| 亚洲精品国产精品成人| 一卡二卡三卡| 青青国产在线拍揄自揄拍| 日日操丁香五月天| 亚洲欧洲av影音| 福利天天都操| 激情欧美日韩女同久久| 91美女丝袜诱惑视频| 亚洲欧洲综合av在线| 蜜臀99久| 夫妻AV网站| 九九热九九热| 天天综合91在线| 91天堂色男人的天堂| 免费观看一区| 丝袜美腿91| 色妇91| 天综合网| 91在线页| 日韩素人无码一区二区三区三州| 久精品无码av一区二免费国产在线观看| 亚洲精品九九九| 漂亮人妻被强中文字幕hd| 欧美国产有色电影| 91精产一区二区三区| 日韩另类色图| 久操热| 国产女人操逼视频| 日日日日做夜夜夜夜无码| 午夜一区| 欧美少妇性乱| 五月天精品| 久久少妇人妻| 久久久久国产| 中文字幕乱妇免费视频| 97碰碰色| 国产操逼网站亚洲一级黄色| 在线视频 亚洲精品| 亚洲九九视频| 啊啊啊久久| 欧中美三级一区二区三区| 亚洲色图第四色| 东京热不卡视频| 碰超人人在线一区二区三区| 91白嫩| 天天躁日日躁狠狠狠躁| 国产搭汕a级片| 狠狠爱夜夜| 亚洲欧美日韩激情不卡| 97超碰久久| 欧美色图色综合| 伊人网高清| 亚洲人久久久久日| 国产深夜福利| 国产精品成久久久久午夜午夜| 玖玖久久久| 99热在线观看| 人人妻人射| 久久草在线综合视频| 看一级黄色视频| AV 少妇 人妻 偷拍| 99热99re超碰精品| 国产精品久久久久久久久久久久久久久久久久| 欧美国产有色电影| 天天92av| 免费亚洲黄色视频在线观看| 超碰人人超在线观看| 91性高潮久久久久久久久| 99综合免费视频| 国产又黄又猛又粗又爽的网站| 99热超碰| 人妻丝袜肏逼| 天天影视综合色| 欧美激情精品| 综合久久久久久久综合网| 97国产高清视频在线观看| 动漫爆乳3D奶水一区在线观看| 超碰在线看| 国产久久一区二区午夜| 99精品伊人| 天天插天天插| 99www.bibizy香蕉资源国产一区二区三区高清| 东京热99999| 伊人超碰97| 精品国产三级av韩国在线| 人妻少妇被猛烈进入中| 久热婷婷| 嗯嗯啊好大| 国产91丝袜 在线播放| 五月天我淫我色av| 野狼激情网| 成人黄页| 超碰78| 免费操逼视频下载| 国产农村妇女精品一二区| 91青青在线视频| 久久久久9999| 操逼日韩无码| 校园春色中文字幕AV| 啊啊啊啊啊啊在线| 国产高清26uuu| 歐美一級亂黃99在綫精品| 吊色| 激情接吻视频久久久久久| 搡老女人老妇女老妇老熟女怎么读| 日本不卡一区二区三区| a片在线播放| 首页亚洲国产高跟丝袜诱惑视频| 精品美女少妇一区二区三区| 国产成人自拍视频视频| 亚洲中文人妻色| 少妇熟女视频一区二区三区| jizzjizz欧美| 玖玖草久草99蜜月一区二区三区| 亚洲国产一级黄色视频| 伊人天堂在线| 日韩有码专区| 亚洲欧美经典一区二区| 嗯嗯嗯啊啊在线观看| 人人玩人人添人人澡免费| AV中文在线可看| 欧美成人精品一区二区男人蜜臀 | 97资源欧美| 欧色网址| 91日韩在线| 黄久在线| 白嫩国模丰满一二三区| 极品色电影院| 国产精品黄色三级av| 欧美最婬乱婬爆婬性视频 | 天天综合青苹果| 久久久久亚洲Aⅴ无码| 九九亚洲精品| 琪琪精品免费一区二区三区| 亚州综合AⅤ| 国产成年女人免费视频播放a| 加勒比在线视频| 高清无码人妻久久久一区二区三区aⅴ| 99久久e免费热视| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 6080yy午夜理论三级一区二区三区无码| 熟女91网| 亚洲另类电影| 日本男人天堂| 在线啊啊啊啊| av爱爱爱| 国产精品天干天干综合网麻豆| 日本精品网站在线中文| 欧美日韩国产人人| 色青青久久影视| 99在线啪| 欧美在线视频99| 欧美99999| 欧美性特| 99视频这有这里有精品| 操逼无毒无码免费视频| 国产精品99久久久www| 亚洲精品97p| 国产少妇肉丝在线观看| 91视频精品| 久久爱超碰网| 国产精品亚洲美女久久久久| 中文字幕欧美丝袜07资源| 欧美乱色| 亚洲综合中文字幕有码| 久草在线| 亚洲图片在线| 六月色婷婷| 东京热一区二区中文字幕| 夜夜嗨AV蜜臀av| 被男人添B超爽视频| 日韩毛片9| 亚洲欧美大| 性饥渴少妇av无码毛片| 久久久性少妇| 97干天天| 亚洲精品色| 久久无码一区二区二三区性色| 91激情综合| 920日本午夜免费| 黑人免费福利视频| 天天影视之亚洲综合网| 九九玖玖精品| 精品少妇一区二区三区在线视频| 青青操网| 这里只有97精品| aaaa少妇高潮大片| 亚洲精品男人的天堂| 91天美免费| 久插综合| 天天肏美女| 在线色导航| 上床啊啊啊| 日日噜噜夜夜久久亚洲一区二区| 蜜桃成人1区2区3区| 国产极品精品美女视频| 亚洲国产97| 亚洲精品不卡一二三区| 国产盗摄美女如厕大神作品在线观看| 婷婷五月天网| 欧美性爱视频免费一区一A| 亚洲全色网| 日本熟妇自慰性高潮一区二区三区| 91老司机在线视频免费观看| 亚洲欧美激情在线视频| 午夜无遮挡男女啪啪视频| 男女啊啊啊| 久久九精品| 亚洲。日韩。欧美| 激情五月综合网| 性久久| 国产午夜在线观看| 中文字幕三四区| 99AV| 激情一区二区| 最新AV在线| 舔人妻中文免费视频| 999 久久久| 暖暖精品二区三区观看| 熟妇高潮一区二区免费视频| 欧美亚洲日韩人妻在线观看| 免费观看啪视频| 无码高清专| 操逼视频亚洲| 午夜欧美女人操逼| 久久精品店| 欧美日韩国产黄色片| 爽极品影院| 九九视频黄色片| 日韩一级欧美一级国产一级台湾| av天堂电影网| 欧美少妇色图| 精品蜜乳AV免费观看| 亚洲国产精品成人久久蜜臀| 亚洲天天更新| 久久久久久九九九| 青青色在线观看| 久久六六| 国产无码久久高清| 美国黄片aaa| 无码久久亚洲高清,| 天天看天天日| 91亚洲色人| 一二三四视频中文字幕在线看| 日韩精品一区二区高清| 久久久久人妻二区精品叶可怜| 亚洲成人在线高清| 日韩无码a片| 国语精品内射在线观看| AV无码久久久精品| 国产成人综合网| 国产剧情一区在线观看| 91最新综合| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 裸体美女久久久| 国产99999久久精品| 乱操9999| 国产成人久久精品蜜臀| 青青青国产手线观看视频2| 日韩中文字幕精品一区在线| 综合自拍| 手机av天堂久久久久| 高树玛利亚无码流出| 久久精品视频在线观看| 久草成人影片| 成人线上超碰| 草莓精品视频| 欧美一区二区在线资源| 国产一区二区精品在线视频| 97香蕉网| 啊视频在线| 熟女在线视频| 欧美人妻一区二区| 视频国产成人精品日本亚洲18| 国内偷自视频区视频综合| 亚洲最大网站av| www.狠狠干.coom | 国产一区二区三区中文字幕| 四虎884a| 欧美性夜| 亚洲导航深夜福利| 亚洲熟妇无码一区二区三区| 欧美一区二区三熟女剧情| 91欧洲国产成人久久精品网站| 最新三级网址| 日韩性色b| 97超碰这里只有精品| 狠狠爱大香蕉| 久久精品国产亚洲AV无码电影| 91 在线亚洲| 蜜臀av网址| 久久伊人最新网址视频| 狠狠激情综合狠狠操中文字幕| 中文字幕91综合| 97久久精品不卡| 91色人妻| 无码人妻一区二区一牛影视| 久久久一区二区三区麻豆| 黄片视频,下载| www.激情| 天天影视综合色| 日韩欧美aⅴ综合网站发布| 97资源超碰| 色欲久久99精品久久| 国产亚洲精品激情| 91黑丝少妇| 亚洲三级。日韩三级| 国产美女mm131爽爽爽爽| 亚洲国产剧情少妇激情| 97爱综合| 67914亚洲精品| 欧美瑟综合| 亚洲中文一区二区三区| 久久婷婷亚洲欧| 51国产午夜精品视频| 日本有码久久| 亚洲91网| 内射日韩大臀美女| 久久久久亚洲熟妇熟女| 久极品在线观看| 天天干嫩逼网| 中亚av| 蜜臀久久99精品久久久久久酒店 | 夜嗨影院| 加勒比色综合| 午夜理论片在线观看免费| 1204金沙人妻懂旧版免费| 久操91视频| 青青操少妇| 日韩精品在线观看观看| 日本新免费二区三区| 国产黄片精品在线| 人妻黑丝袜电影| h无码动漫在线观看| 亚洲人久久久网| 国产精品视频白浆免费| 夜夜国自区| 九九aV| 大香蕉狠狠爱| 97二区四区| 女欧美一区二三区| 久久动漫精品视频这里只有精品| 图片区小说区| 91黑丝在线| 麻豆人妻少妇在线免费观看| 操逼逼中文字幕| 草B在线| renqi久久久久久久久久久久| 三四中文字幕| 欧洲中文字幕| 亚洲无码AV九九九| 粉嫩AV一区二区夜夜| 啊a一区在线| 精品中文字幕第一页| 欧美一区二区三区黄色影视| 五月婷久久| 日韩射精| 日日夜夜青青草母狗| 中文字幕精品日韩中文字幕| 日韩猛交| 国产熟女二区| 激情综合五| 日B操| 蜜桃臀一区二区aV| 久久久久久大| 精品亚洲国产成人AV制服丝袜| 91精品网站| 丝袜天堂| A久久| 不卡av在线中文字幕| 超碰天天去日穴| 99999精品成人| 欧美性爱三区二区| 在线亚洲 欧美 日本专区 | 高树玛利亚无码流出| 美国aaaaa一级黄片| 欧美 亚洲 第一页| 久湿久久| 91网亚洲| 五月天婷婷久久| 国产日韩在线播放av| 成人性生活高清视频在线播放| 97露脸精品丝袜| 日日夜夜狠狠| 最新中文字幕在线亚洲| а√天堂资源官网在线资源| 超碰4A| 性性久久| 91高跟美女在线播放| 九九热在线视频| 日本一区二区做爱的视频| 国产精品久久久啊| 一本色道人妻久久| 91欧美少妇| 97er欧美性| 蜜色网色哟哟| 人妻熟女一区在| 亚洲 欧美 手机在线观看| 亚洲无码超碰免费| 欧美91在线| 啊啊啊啊免费视频| 五月天人妻综合| 色www精品视频在线观看| 成 人 影视 一区 二区 三区 四区| 色情五月丁香| 成片免费播放| 国产在线视视频有精品| 国产偷拍自拍在线视频| 亚洲成a人在线观看久| 天天草夜夜草高潮片| 欧美特大AA级黄片| 草草草视频在线免费看| 午夜男女爽爽大片免费观看| 黑人免费福利视频| 天天干天天操天天操夜夜操天天操 | 97超碰碰碰| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 九九无码| 国产精品白领在线观看| 91性高朝久久久久久久久| 国产亚洲色停停久久99精品91| 女色综合| 日韩AV无码网站| 五月天婷婷在线看| 五月婷婷丁香六月丁香| 久久亚州精品成人Av无| 亚洲另类小说卡通动漫| 乳欲人妻办公室奶水| 国产一级高跟丝袜| 老司机深夜影院18未满| 免费的黄片wwwwww| 亚洲经典啪啪| 97在线免费看| 九九热超碰97亚洲最新香蕉| 精品无码一二三四区| 中国熟女网站| 校园春色美腿丝袜| 欧洲久久一二线| 内射夫妻三片| 色综合av男人天堂| 婷婷五月天色| 国产有码一区| 一本久久精品中文字| 热久久无毒不卡| 欧美 亚洲精品首页| 亚洲无线观看久久| 国产Aα| 熟女突然公开看18禁影片 | 天天做天天爱| 国产精品亚洲四五区在线观看| 国产美女口爆吞精| 欧美综色欧| 欧美91精品国产自产| 中文字幕AV乱伦| 色一色综合网| 91女网站| 亚洲人精品久久久| 欧美AAAA黄片| 99自拍视频在线| 亚洲不卡av在线| 日韩 欧美 国产 麻豆| 欧美的精品的视频| 尤物网址| 国产av高清版| 九九综合网| 夜夜精品视频| 亚洲成?V人片在线观看福利| 男人的天堂啪啪| 午夜毛片高清免费不卡| 啪啪啪亚欧美视频| 思思性爱| 在线视频一区二区传媒| 大香蕉性欧美| 精品人妻中文字幕4399| 9久综合网| 尤物视频偷拍免费| 国产v片在线免费观看| 国产亚洲精品自在线亚洲情侣| 免费看污网站| juliaann欧美丝袜办公室| 免费一级a毛片久久久久久鸭绿欲| 五月丁香婷婷色| 91天射| 国产午夜精品理论片a大结局| 围产精品一区二区三区视频播放| 熟妇高潮一区二区免费视频| www.人人摸在线视频| 日本操色导航| 超碰午夜在线| 精品人妻一区二区三区日产| 五月婷色| 综合少妇网| 亚洲一卡2卡3卡4卡乱码网站 | 久久久国产精品人妻丝袜| 99re视频在线播放青草| 国产女生在线| 99精品高潮| 国产精品免费1区2区视频| 天天综合网一91网| 天天久久| 五月天婷婷成人网| 日本 情色 1区| 最新国产精品久久精品| 久久机热| 国产精品香蕉热久久新品| 在线一区| 日本女优在线视频福利| 婷婷五月天无码| 欧洲综合无码| 歐美性天天| 免费啪啪av| 一本大道综合伊人精品热热| 69少妇一区二区| 97精品第3页| 日本操逼视频不卡直接放| 欧美色图偷拍另类| 国产久久免费精品视频| SS久久| 亚洲精品白浆高清久久久久久 | 国产吞精a级片激情电影| 男女性扦B| 亚洲无码久久久久久久| 亚洲男人天堂视频| 最新日韩黄片| 日本黄色精品| 久久精品小视频| 好属操| 内射中出日韩在线观看视频| 欧美精品精品一区二区| 91欧美美女日韩国产婷婷| 欧美一区二区三区四区综合| 亚洲drav色图| 看一级黄色视频| 96麻豆精品一区二区三区| 免费夜夜爱黄色视频毛片| 91美女小视频| aaa淫乱视频| 自拍偷拍 高清无码| 男女香蕉一区二区| 色五月婷婷网| 亚洲性爱成人| 欧美色色人| 久久久九九网站| 天天日天天干少妇日| 天天摸夜夜摸| 91c色| 99国产女人| 色老汉色| 色成人Www精品永久观看| 91麻豆天美国产欧美高潮| 色丁香五月婷婷| 一区二区三区免费视频入口| 精品久久久不卡一区二区| 国产无马av| 国产精品久久久啊| 狠狠爱夜夜干| 麻豆天美国美国产| 91P0RNY大屁股人妻| 久久久专区| 色五月婷婷网| 欧美日韩操逼动图| 亚洲图片欧美偷拍| 九九九九日本| 日韩欧美视频青青| 色色色色日本| 亚洲无992tv| 69精品人人人人| 4399成人黄A片| 26uuu性物| 五十路熟女人妻一区二区在线观看 | 亚洲第2页| 日本久久女同性恋视频| 久久网亚洲| 97色论| 五月婷婷激情综合| 国产一级作爱毛片| 四虎国产精品永久在线囯在线| 精品白丝一区| 亚码人妻| 99re不伦| 国语人妻精彩刺激| 翔田千里av一区二区三区| 香蕉热人人精品| 91肉片| 超碰色97| 麻豆色99999| 免费成人在线熟妇网| AV一二区| 98色网| 超碰国产在线| 久久综合激情| 欧美人妻一区| 成人麻豆av电影网站| 国产婷婷综合在线观看| 亚洲国产成人精品女人久久久| 91操熟女视频| 狠狠干2020| 豆1无夜无码| 97在线无精品| 亚洲欧美日产国产91毛片| 欧美一级欧美三级在线观看| 中文字幕日韩国产传媒欧美精品| www.超碰在线| 成人片在线播放| 成人三级片无码| 美中日韩无码| 免费操逼视频下载| 亚欧高清在线| 26uuu国产免费观看| 秋霞影音一区二区三区| 高清无码 国产精品| 能在线播放的国产三级| 亚欧视频在线| 国产亚洲精品美女久久久m| 免费αⅴ在线观看| 国产第25页在线观看| 思思热er精品视频| A片 AV一级在线播放观看免费| 国产女人操逼视频| 欧亚在线视频| 一级人妻性爱视频| 97国产中文| 亚洲中文字幕久久无码精品| 亚洲素人综合| 超碰久超碰久| 人妻三级在线中文字幕| 1000部熟女视频在线观看| 亚洲AV成人无码一二三久久| 中国zzijzzijzzwww精品| 日韩Va亚洲va欧美Ⅴa久久| 亚洲成a人在线观看久| 人人扣人人操| 激情四射婷婷四五月天| 禁十八久久| 日本孕妇孕交| 中文字幕乱妇免费视频| 亚洲人成在线放东京热| 精品无码久久久久久国产浪潮| 啪啪免费| 99在线精品视频| 激情图片伦理国产一区二区日韩| 蜜桃久久精品一区二区三区| 国产日韩中文字幕欧美| 成人性生活高清视频在线播放| J?P?NESEHD熟女熟妇伦| 操逼国产免费| 丁香五月色| 欧美熟妇乱码在线一区| 亚洲素人网| 久久老熟女| 天天看精品动漫视频一区| 在线观看AV片| www.婷婷| 国产亚洲精品美女| 大香蕉日韩| 欧美日韩啪啪电影| 亚洲AV成人在线| 色综合中文字幕不卡| 天天拍天| 欧美v日韩v亚洲v最新在线| 污污汅18禁网站在线永久免费观看 | 美女上床网站| 日本阿v天堂在线观看| 中文字幕精品日韩中文字幕| 可以免费观看的av| 97操在线| 啊啊啊好想要| 亚洲AV成人无码一区二区三区在线观看| 麻豆天美久久91| 黄久在线| www熟女乱伦com| 亚洲另类电影| 伊人aaa| 92一区二区| 新婚人妻扶着粗大强行坐下| 在线啊啊啊啊| a啊啊啊啊啊啊啊啊一区二区| 亚洲成人在线高清| 大奶啊啊好爽| 婷婷五月天色网| 操逼日批| 国产av高清版| 五月天久久人妻| 国产熟女完整版中字| 91原创在线观看| 久操免费视频| 欧美午夜一区二区三区| 日韩午夜国产| 欧美 精品国产制服第一页| 97香蕉碰碰人妻国产欧美| oumeizonghese,www| 在线日韩日本亚洲国产| 久久五月综合| 夜夜做夜夜爽精品视频| 一起草日韩| 久久亚洲不卡一区二区三区| 清纯唯美亚洲综合| 国产激情久久| 美女91网址| 无码人妻丰满热妇又大又粗| 日韩天天本| 成人av在线播放| 宗合情欲网| 日B操| 99热精品青草在线| 中文字幕在线观看网址| 五月天激情小说网| 久久9精品| www久久久| 亚洲成成熟女人综合一区二区| 一级免费啪啪片| 97射欧美| 开心五月婷婷激情| 人妻少妇精品久久久久久| AAA久久| 超碰天天去日穴| 色综合九九| 精品无码久久久久久久杏吧| 久久综合97| 九九成人精品| 五月天偷拍| a天堂视频| 国产欧美一级在线观看| 93人人操人人| www.夜夜操| 欧美性天天影视| 97日视频| 操死我了嗯嗯嗯| 国产精品3| 国产97在线播放| 26uuu国产免费观看| 99日免费视频中文字幕| 中国一区二区亚洲人妻| 超碰在线成人电影| 久久婷五月天| 白丝AV| 福利色色| 欧美国产一区二区三区麻豆传媒 | 国产自偷自拍一区| 中国熟妇| 日韩另类色图| 激情综合网激情综合| 人妻久热在线| 欧美人人曰人人操人人射射| 男人的天堂2000| 岛园激情| 五十路熟女人妻一区二区三区四区五| 内射日韩大臀美女| 一区二区三区亚洲| 视频在线观看青青99国产| 九月婷婷综合| 国产91影院| 极品后入免费视频| www…国产操逼| 蜜桃久久一区二区| 色诱avtt| 亚洲蜜桃V妇女| 97亚洲在线| 欧美永久激情一区二区| 日本操大逼| 天天操天天舔| 成人A片男人的天堂| 色综合久久88色综合久久天天| 四虎影视精品| 青青草色情网站视频| 黄色片大香蕉| 日本熟女不卡视频| 蜜臀99久久精品久久久久久| 国产精品国产自产拍高清AV| 91久久精品中文字幕| 亚洲三级。日韩三级| 91高跟美女在线播放| 丁香五月影院| 日韩国产乱子伦App| 国产精品乱码久久久久| 中文字幕视频免费| 女人的久久久| 另类一区| 日韩中文字幕视频| 91中出视频| 久久骚少妇| 久久精品人体AV| 99久久e免费热视| 偷拍精品一区二区三区| 亚洲影视第一页| 亚洲永久永久永久永久一级一级一级精品 | 亚洲国产日韩精品久久久| 97色涩| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲强奸乱伦影视网| 亚洲欧美日韩制服另类| 妇女一区二区三区| 欧美日韩国产色五月综合在线| 五月婷婷hd| 亚洲AV无码天美传媒一区| 国产小u女在线观看| 国产久久成人| 欧美性爱日韩高清| 久久大黄片| 天堂性色| 东北女人性交| 99热国产精品| 狠狠做深爱婷婷久久二区| 不卡九肏| 搡老女人老妇女老妇老熟女怎么读| 国产精品99久久久www| 麻花传媒免费网站在线观看| 翔田千里无码中出中文字幕| 国产亚洲色婷婷久久99精品91 - 百度| 欧美色蜜桃97| 大色网久久| 欧美性Fer办公室秘书| 日本男人插女人的逼黄色| 天堂资源欧美| 熟妇视频一区二区三区在线观看| 亚洲不卡AV在线| 天天日少妇逼AV| 欧美躁死她一区二区| 日本片日本片祼观看网站在线看中文版网页在线看 | 91丰满| 日日躁夜夜躁狠狠躁超爽| 久久久久久人| 97久久久网站| 日韩精品啪啪啪| 九九九网站| 亚洲男人天堂av| 黄骗免费网站| 亚洲无码国产探花在线观看| 超碰97人人cao| 久综合国内精品自在自线| 国产黄色在线播放观看| 日本黄色大片一级视频免费麻豆| 国产亚洲精品美女久久久| xxxx网站亚洲精品| 日韩人妻中文视频| 亚洲国产欧美中文永久| 婷婷色在线| 综合色图,成人综合网| 少妇无码太爽| 自拍视频大全亚洲专媒视频/一区二区三区 | 黑人天8A∨高清网站| 屌妞视频久久久久久久 | 欧美日韩人人精品| 四虎国产成人精品免费一女五男| 婷婷另类小说| 国模91| 蜜臀网 一区| 无码高清操逼| 亚欧视频在线| 婷婷五月av| 丰满少妇一区二区三区专区| 1区2区3区中文字幕日韩| 伊人aaa| 久久久久久中文| 97碰久久| 日韩成人在线性爱视频| 日韩不卡毛片Av免费高清| 91丨九色丨43老版熟女| 情色日播放AV| 亚洲网污污污污| 美女t无毒不卡不卡| 日韩成年人性爱视频| 中文字幕五月婷婷免费| 欧美刺激色黄片免费看| 操九九九九九九| 亚洲日韩乱码中文无码蜜桃臀网站| 国产97在线播放| 日本乱人伦片中文三区| 青娱乐久久艹| 91女网站| 日日AAvv| 黄片免费日韩| 中文字幕狠狠玩| 欧美少妇一区二区三区| 四虎免费视频| 精品久久久av无码免费| 福利在线黄片| 人妻一区二区三区| 青青草在线视频播放器| 成人自拍三级在线观看| 爱射综合| 亚洲国产成人精品999| 日韩射精| 国产偷拍自拍在线视频| 无码人妻一区二区一牛影视| 物业黑人 AV一区| 国产精品久久久啊| 亚洲AV永久无码一区仙野| 蜜桃不卡一区二区| 九九九九精品视频| 干日本人少妇午夜寂寞影院| 校园春色制服丝袜中文字亚洲 | 99热精品在线| 丝袜美女诱惑 91 视频| 久久老女人| 国产久久久久久久久一区二区 | 情侣开房子拍 日韩无码 女的很漂亮| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 欧美色图亚洲特色| 日日躁夜夜躁狠狠躁超爽| 丰满人妻无码一区二区三区 | 国产精品成人无码av| 青青草视频导航官网| 91bbb| 97色碰| 中文字幕无码不卡啪啪| 日韩中文字幕精品一区在线| 啊啊啊啊啊啊啊国| 十八禁黄色| 中文字幕狠狠玩| 色九九九综合| CCYY草草影院地址入口| 你操综合| 99热这里只有精品18| 久草视频分类在线| 夜夜做夜夜爽精品视频| 中国一级特黄大片护士| 第二页中文字幕| 亚洲九九九| 国内外色色色色色成人视频| 丰满熟女人妻一区二区三五十一路| 噜噜噜在线视频| 性色国产东北露脸精品视频| 搡老熟女免费视频| 东北黄色电影| 秋霞Av理论一级在线| 欧美日不卡| 诱惑网综合| AA丁香综合激情| 超碰色97| 国产欧美日韩在线观看麻豆传媒公司| 亚洲天堂另类| 91碰碰| 久久二| 久久久久免费少妇| 一区二区三区四区理论片| 婷婷久久综合| 亚洲综合电影| 国产久久视频| 一级人妻性爱视频| 97看操| 国产三级多多影院2022国产AA一级毛片无码 | 日本一区二区三区欧美日韩中文字幕| 国产精品96| 欧美AB在线观看| 亚洲天堂在线怕怕视频| 美女啪欧美一区| 亚洲天堂AV在线播放| 国产风韵犹存熟妇三区| 午夜免费福利视频一区| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 日本大片日本一区二区免费高清| 国产精品网址| 宗合情欲网| 波多野结衣先锋影音| 亚洲美腿丝袜香蕉影视欧美成人| 婷婷久热| 97香蕉网| 久久久久久久久久黄色网| 手机在线人成免费视频| 欧美韩日精品99综合| 亚洲熟妇自偷自拍另欧美| 91AV入口| 狠狠干妹子| renqi久久久久久久久久久久| 亚洲欧美另类激情小说| 情色五月天网| 日韩操人| 欧美日韩大香蕉| 午夜精品久久久久久久| 一区二区激情国产熟女| 欧美高清18A片| 九一国产精品| 嗯啊不要啊在线 | 无码精品久久久久久亚洲| 97看操| 九九久久99| 亚洲乱色熟女一区| 偷拍亚洲视频一区二区三区四区| 极品五月天噜噜| av网站在线观看了| 欧美亚洲首页| 午夜福利在线视频1000| 中文字幕黄色片| 欧洲亚洲国产综合在线| 少妇高潮九九九九九九九| 久久久9品一区二区三区| 日韩国产乱子伦App| 99久久99久久免费精品蜜臀| 2019午夜福利视频| 天美传媒国产原创中文字幕亚洲欧美另类 | 日韩有码 一区二区三区| 久久女女| 97色诱| 91人妻爽爽人人做人人澡| 欧美黄色片在线播放| 91岛国动作片| 丝袜狂射91| 啊好爽受不了无码| 99精品热| 日韩一级成人毛片免费观看| 欧美精品三区| 色约约一区=区三区| 日韩精品电影| 日日夜夜骚| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 久久久涩| 熟女精品一区二区在线观看| 91老司机在线视频免费观看| 动漫爆乳3D奶水一区在线观看 | 超碰97人妻在线| 国产91丝袜 在线播放| 亚洲色香| 夜夜嗨AV蜜臀av| 六月丁丁香| 自拍偷拍2025在线观看| 人妻81p| www.99色| 欧美91在线| 日韩欧美女求操每天更新| 黑人粗大V S日韩女优视频| 免费久久9999| 白丝AV网站| 色噜噜人妻av 中文字幕| 99热| 丁香五月色情| 黄片www.| 综合欧美日本三级| 国产高清在线观看欧美| 26uuu欧美日韩| 强被迫伦姧在线观看无码网站| 天久久久噜噜噜久久国产精品爽爽| 欧美图片色五月天| 亚洲人人夜夜澡人人爽| 老熟女中文字幕高清| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 中日韩免费看男女操逼大全| 超碰97综合| 亚洲熟妇A V黑人| 密臀在线一区尤物| 青青青在线高清视频在线一二三四区| 人妻少妇无码 | 天天操天天看| 91熟女.com| 97情超碰色| 99久在线精品99re8| 国产AV线| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 91超碰人人操| 99久在线精品99re8| 成片免费播放| 九九在线精品| 最新加勒比丝袜在线| 成 人 影视 一区 二区 三区 四区| 天美传媒av 在线| 青娱乐导航AV| 久插综合| 岛国999| 欧美第五页| 麻豆91熟妇人妻中文字幕茄子 | 成人久久久精品| 99精品在线| 国产精品久久泡妞网站| 欧美综合另类| 亚洲中文字幕精品一区| 9国产超碰| 中文字幕中文字幕一区二区| 伊人影院综合是一个与深夜成人在线| 殴美在线AⅤ| 91chinese在线| 亚洲国产欧美日韩人妻日中文| 嗯……啊…嗯嗯…啊…好舒服| 亚州久久9| 老熟妇一区二区三区…| 在线中文字幕极品av| 操逼日韩无码| 97超碰69| 欧洲精品网| 91日韩网站| 91精品国产91综合久久蜜臀| 国产三级资源在线观看| 欧美日本国产日韩激情视频| 久久久com| 夜夜狼人妻| 韩国毛片一区二区三区| 久久黄人人爽视频| 精品久久无码午夜福利| 色嗨嗨在线| 中文字幕啊啊啊在线观看视频| 日日夜夜骚| 97超碰欧美手机在线| 91成人18| 久久一区二区高清免费| 99精品视频在线观看| 神马久久网| 日韩精品一区二区人人人| 操逼日批|