久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(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ā)的人遲早都會遇到字符編碼轉換這個繞不過去的坎。尤其是要把一套代碼同時跑在macOS、Windows和Linux上且還要求產物能干干凈凈地單獨部署的時候編譯一個libiconv的靜態(tài)庫就成了最省心的方案。這篇文章就圍繞“在macOS、Windows以及Windows下的MinGW環(huán)境中分別編譯libiconv靜態(tài)庫”這件事把我在實際項目里踩過的坑、試過的參數(shù)、驗證過的產物整理出來。不管你是要給某個跨平臺數(shù)據(jù)處理工具準備底層庫還是只想擺脫Windows上缺乏原生iconv的窘境這篇都能給你一條可以直接照著走的路徑。先說清楚我要做什么libiconv是GNU提供的字符編碼轉換庫接口簡單核心就是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加載問題。整個文章的核心思路是這樣的不繞彎子三種場景分開講每個場景都給出完整命令、關鍵參數(shù)的含義、以及我實測過能用的產物驗證方法。中間還會穿插我在某跨平臺項目中遇到的實際報錯和排查過程這部分內容普通文檔里不會寫但往往才是真正卡人的地方。1. 為什么非要用libiconv靜態(tài)庫1.1 Windows和macOS上的iconv到底有什么坑先說Windows。很多人第一反應是Windows不是有MultiByteToWideChar和WideCharToMultiByte嗎確實有但那兩個API只能解決ANSI/UTF-16/UTF-8之間有限幾種轉換遇到GBK、BIG5、Shift-JIS這種歷史遺留編碼再遇到編碼之間互相轉換比如GBK直接轉Shift-JISWindows原生API幾乎沒有可用途徑。更麻煩的是Windows上不同版本的UCRT、MSVCRT對代碼頁的處理還有差異同樣的代碼在Win10上跑得好好的換到Win7又變了一副面孔。這就是為什么跨平臺項目幾乎清一色選擇libiconv它把編碼轉換統(tǒng)一成一個抽象層一份代碼在所有平臺行為一致。再說macOS。macOS確實自帶iconviconv.h在系統(tǒng)SDK里也能找到直接#include iconv.h然后鏈接-liconv似乎就行了。但這里有個隱蔽的問題macOS自帶的iconv版本更新節(jié)奏非常慢且Apple對它的自定義改動不少具體行為未必和GNU libiconv完全一致。比如某些邊緣編碼的轉換差異、錯誤處理方式、線程安全問題踩到了就很頭疼。如果項目里需要確保所有平臺使用同一個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調整加載路徑但帶上rpath的處理簽名、公證的時候也會多一些麻煩。而靜態(tài)庫只需要在鏈接階段把.a或.lib文件吃進去最終產物就是一個獨立的可執(zhí)行文件復制到任何同架構的機器上都能直接運行不需要關心目標機器上有沒有對應的動態(tài)庫、版本夠不夠新。其次靜態(tài)鏈接能讓最終程序的行為更可控。動態(tài)庫的版本由運行環(huán)境決定今天編譯時用的符號在這個版本上存在用戶機器上的老版本庫可能根本沒有這個符號或者行為完全不同。而靜態(tài)庫把實現(xiàn)完整鎖進產物里源代碼是什么版本運行就是什么版本。對講究可復現(xiàn)、需要長期維護的項目來說這個優(yōu)勢非常關鍵。這里補充一個我的經(jīng)驗靜態(tài)鏈接也有代價體積會增加、多個庫之間可能有符號沖突、安全更新時不能只替換動態(tài)庫。但如果權衡部署穩(wěn)定性和行為一致性libiconv這種小而穩(wěn)定的庫靜態(tài)鏈接幾乎是當下最平衡的選擇。2. 編譯前必須理清的三個平臺差異2.1 源碼與構建體系先認識GNU autotoolslibiconv的源碼包雖然是GNU項目但真正拿到手后發(fā)現(xiàn)它不止是“一堆C文件”而是基于autoconf/automake組織的一套標準構建體系。解壓后你會看到configure、Makefile.in、config.h.in這些文件。它的構建邏輯是先運行./configure探測當前系統(tǒ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)庫三條路線對應三種不同的頭文件和庫格式不能混用。MSVC編譯出來的.lib不能給MinGW鏈接MinGW編出來的.a也不能給MSVC用。這是第一次做跨平臺編譯的人最容易忽略的地方。2.2 工具鏈準備不同場景該裝什么macOS側只需要一個Xcode Command Line Tools。打開終端執(zhí)行xcode-select --install裝好就有clang、make、ar、ranlib這些基礎工具。要注意的是別用系統(tǒng)自帶的/usr/bin/make版本太老的問題實際用下來預裝的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路線因為構建服務器上不需要圖形界面。Windows MinGW路線準備方式得細說。MinGW本身有很多發(fā)行版常見的是MinGW-w64但為了跑configure腳本和make我更推薦直接裝MSYS2然后在MSYS2里安裝mingw-w64-x86_64-gcc。這樣你既有MinGW的GCC工具鏈又有了一個Unix風格的shell環(huán)境處理autotools構建會順暢非常多。官方安裝包地址網(wǎng)上很容易找到安裝完成后在開始菜單打開“MSYS2 MSYS”終端執(zhí)行pacman -S mingw-w64-x86_64-gcc base-devel就能把編譯環(huán)境備齊。這里強調一下MSYS2里有兩套環(huán)境MSYS環(huán)境編譯出來的東西依賴MSYS運行時MINGW64環(huán)境編譯出來的才是純Windows原生程序。我們做libiconv靜態(tài)庫必須在MINGW64環(huán)境中操作。2.3 靜態(tài)庫的產物形態(tài)與命名差異編譯完成后三種環(huán)境下得到的靜態(tài)庫文件名和格式都不同先建立這個預期后面驗收時就能對號入座。macOS下產出的是libiconv.a這是一個Mach-O格式的靜態(tài)庫內部的object文件后綴是.o用ar -t libiconv.a可以列出里面的成員。Windows MSVC下產出的是iconv.lib這是一個COFF格式的靜態(tài)庫但要注意MSVC的.lib有兩種情況一種是真正的靜態(tài)庫另一種是導入庫import library只是告訴你符號在哪個DLL里。我們編譯的是前者鏈接時直接把代碼合入exe。區(qū)分方法可以用dumpbin /headers iconv.lib查看文件頭或者在同一個目錄下看有沒有對應的iconv.dll沒有DLL的話基本可以確定是真靜態(tài)庫。Windows MinGW下產出的是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目錄把編譯結果統(tǒng)一放進去。因為默認的configure會把頭文件和庫文件安裝到/usr/local我不想污染系統(tǒng)的/usr/local更希望所有產物都收納在當前工程目錄里方便后續(xù)打包。mkdir -p /tmp/libiconv-macos/build-output實際開發(fā)中我習慣在工程目錄內建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ù)場景其實只需要當前架構。3.3 make與產物驗證接下來執(zhí)行make -j8 make install-j8用8個并行任務編譯速度會快不少。如果機器配置一般改成-j4也可以。整個編譯過程的輸出里如果出現(xiàn)warning一般不影響最終結果但看到error就必須停下來看日志。編譯完成后檢查產物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)設計的在這個環(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里調用讓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是關鍵直接把編譯器指向MSVC的cl.exe。-MT參數(shù)讓運行時庫使用靜態(tài)版這樣最終exe不依賴msvcp140.dll、vcruntime140.dll這些動態(tài)運行庫程序復制到別的Windows機器上更容易跑起來。然后構建時不能用make因為autotools生成的Makefile里寫用的是make而MSVC環(huán)境下更好用的是nmake。實際操作中我見過有人直接用make也過了因為Git bash環(huán)境里帶了GNU Make它也能解析autotools生成的Makefile但最終調用CC時用的是cl所以核心還是MSVC工具鏈。穩(wěn)妥起見建議這樣執(zhí)行make -j8 make install如果中間報nmake相關的錯誤或者Makefile語法問題可以嘗試把make改成用nmake -f Makefile.msvc但libiconv官方實際上沒提供完整的MSVC專用Makefile多數(shù)情況還是要走autotools生成的Makefile。實測Git bash里用GNU make是最順的方案。產物驗證時檢查/tmp/libiconv-windows-msvc/lib目錄會得到iconv.lib和charset.lib兩個文件。用dumpbin /symbols iconv.lib如果能列出iconv_open等符號說明庫沒問題。注意MSVC的靜態(tài)庫沒有.a擴展名鏈接時直接在Project屬性里加上這個iconv.lib即可。這一步我印象很深最初一直以為MSVC下必須手工寫DEF文件或者用第三方預編譯包繞了好大一圈才發(fā)現(xiàn)autotools在Git bash cl的組合下就能直接工作關鍵是CCcl變量別被bash默認的gcc覆蓋掉。4.2 MinGW編譯最省心的一條Windows路線MinGW路線的體驗是真的好很多因為MSYS2環(huán)境天然就是Unix風格的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)境變量問題。產物檢查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內部對符號名做了修飾實際鏈接時用-liconv就行了不需要你手動處理前綴問題。我在某個Windows數(shù)據(jù)采集客戶端里用的就是這套MinGW編譯的靜態(tài)庫配合-static和-static-libgcc最終exe在幾臺沒裝任何運行庫的干凈Windows測試機上都能直接跑起來效果很理想。4.3 兩種Windows路線的選擇建議MSVC和MinGW兩條路線各有領土不是一個替代另一個的關系。如果項目主工程是Visual Studio解決方案那肯定選MSVC編譯的iconv.lib因為VS工程無法直接鏈接MinGW的.a文件。反過來如果項目用CMake且工具鏈是MinGW或者你在做跨平臺腳本構建MinGW路線更合適因為它的構建過程幾乎無摩擦。另外有一點需要提醒很多在線教程會直接讓你下載別人編譯好的iconv.dll或libiconv.a塞進項目里這種做法在個人小工具里可能行得通但放到正式產品里會埋雷。來源不明的二進制無法保證和源碼版本一致、無法復現(xiàn)構建過程也說不清有沒有被人動過手腳。自己走一遍編譯流程并不難卻能把這些問題一次解決干凈。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這時候要往前面翻日志看具體原因。現(xiàn)在常見的是缺少對應的SDK鏈接庫。MSVC環(huán)境下如果你用Build Tools而不是完整Visual Studio很容易漏裝Windows SDK的庫文件部分導致鏈接測試程序時失敗。解決方法是回到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標準相關的warning不用怕舊版本的libiconv源碼用的是老式C風格在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相關宏定義或者直接在代碼里調用libiconv_open試試配合nm查看靜態(tài)庫里實際導出的符號名來確認。5.4 看似成功但運行時行為怪異這個坑很少人提但很陰編譯出的靜態(tài)庫本身沒問題鏈接也成功但程序運行到字符轉換時返回(size_t)-1errno是EILSEQ。這種問題往往和庫本身無關而是編碼名不對。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)庫時編碼轉換代碼里的頭文件寫法要注意#include iconv.h但如果你的項目同時可能接觸到系統(tǒng)自帶的iconv需要重點審視iconv.h里LIBICONV_PLUG這個宏。這個宏存在是為了做兼容層設計當系統(tǒng)已經(jīng)有一個iconv時可以通過定義LIBICONV_PLUG讓libiconv使用系統(tǒng)iconv的符號名但當我們靜態(tài)鏈接自己編譯的libiconv時通常不需要定義這個宏直接讓libiconv把自己的iconv_open等符號暴露出來即可。為了避免符號沖突libiconv其實把實際導出符號定義成了libiconv_open等帶前綴的名字然后通過宏在頭文件里映射成iconv_open。這意味著如果你同時鏈接了其他也提供iconv_open的庫就會出現(xiàn)重復定義或者符號被覆蓋。解決思路是在編譯自己的C文件時統(tǒng)一使用#define LIBICONV_PLUG或統(tǒng)一不定義并確保所有源文件使用同一個iconv.h頭文件不要讓不同編譯單元各看各的頭文件。這一點在大型項目里尤其重要分散在多個CMakeLists里的子項目很容易出現(xiàn)“有的編譯單元用系統(tǒng)頭有的用libiconv頭”的混亂局面。6.2 CMake集成示例如果是CMake工程以下是我實際在用的模板支持三個平臺自動選擇對應的靜態(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相關flag讓整個可執(zhí)行文件不依賴運行時DLL。這屬于工程級配置和libiconv本身無關但直接決定最終產品能否“一個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。這樣它們之間的內存管理、CRT啟動邏輯才能保持一致否則一個庫在A運行時里malloc、在B運行時里free結果往往是一聲不吭地崩掉。7. 關于編譯性能與庫體積的補充思考靜態(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)表裁剪收益不大風險卻不小——真用到被裁掉的編碼時你根本想不到是這個原因。所以我個人建議保持默認全量編譯省心最重要。編譯速度方面三個平臺基本都在分鐘級以內幾乎不構成工程瓶頸。反而是版本升級和重新編譯的流程更容易被忽視update libiconv后務必同時更新三個平臺的靜態(tài)庫和頭文件避免Mac上用了新版、Windows還在用舊版結果同一套源碼在兩邊行為不一致。這種跨平臺差異類bug比編譯錯誤難查一個數(shù)量級。8. 一些經(jīng)驗總結與避坑心得走了這幾輪編譯流程幾個體會非常深。第一別小看環(huán)境變量和路徑問題。三套路線的大多數(shù)報錯都集中在“工具鏈沒在這個終端里生效”而不是代碼本身。每次編譯前先在終端里執(zhí)行which gcc、cl或xcode-select -p確認工具鏈在位能省掉大量看起來莫名其妙的報錯。第二不同平臺的產物命名差異要提前接受。macOS下的libiconv.a、MSVC下的iconv.lib、MinGW下的libiconv.a文件名只是表象真正要緊的是靜態(tài)庫格式和符號規(guī)則。把它們按平臺放進不同的third_party目錄用CMake或類似構建系統(tǒng)做平臺分支才是最省力的管理方式。第三不要用網(wǎng)上隨手下載的預編譯庫替代自己編譯。并不是說所有第三方預編譯包都有問題而是你無法確認它的編譯參數(shù)、版本和完整來源這在正式項目里引入的風險完全不值得。自己編譯的靜態(tài)庫至少你清楚它來自哪個版本源碼、用了什么CFlags、包含哪些模塊。第四碰到奇怪的鏈接錯誤第一步永遠是nm或dumpbin查看靜態(tài)庫的真實符號不要憑頭文件猜。頭文件里的宏映射和實際導出符號之間的偏差是這類工作里最棘手也最常見的坑。最后再分享一個小技巧編譯好的三個平臺靜態(tài)庫和頭文件我會連同源碼版本號一起歸檔在項目倉庫的third_party/libiconv-1.17目錄下目錄內放一個README.md記錄每套庫的編譯時間、編譯器版本、configure參數(shù)。三個月后再來維護這個項目或者有新同事接手看到這份記錄能省下大把重新摸索的時間??缙脚_靜態(tài)庫這活兒本身的編譯時間不長真正容易出問題的全是“當時沒記錄下來的細節(jié)”。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷综合| 酒色综合网| 久久亚洲熟妇在线视频| 日韩av三四区| 嗯嗯啊啊操死我| 碰碰在线视频| 久久男人的天堂国产| 国产亚洲国产超碰| 色爱综合网| 96久久精品一二三区色欲| 99re国产精品视频| 五月婷网站| 不卡av在线中文字幕| 在线亚洲 欧美 日本专区| 超碰 av 女人天堂| 啊啊啊好舒服视频在线观看| 五月开心久久AV官网| 最新国产精品久久精品| a久久| 99热66| 日韩精品区二区三区不卡| 亚洲婷婷五月天| 97天堂| 婷婷日韩一区二区三区中文字幕在线| 久久女人视频| 无码久| 日本不卡一区二区三区| 夜夜精品视频一区二区| 97超碰精品图片| 欧洲精品二区| 色欲Av人妻精品一区二| 亚洲最大成人a毛毛片| 日本操嫩b网| 亚欧韩av| 中文字幕精品人妻丝袜| 大肉棒导航| 色97综合中文字幕| 裸模AV女优| 成人久久久精品| 五月丁香婷婷综合| 素人播放一区| 亚洲大胆人体av| 69久久| 9色国产精品一区粉嫩| 日本欧美一区二区三区免费| 91操人| 91 国产丝袜在线放观看| 天天澡天天爽日日av| 蜜臀va69| 日本高清免费一本视频在线观看| 日本性爱少妇| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 91情色| 在线国产福利网址导航| 日本欧美韩国日产片片在线看免| 制服中出中文人人精品| 精品亚洲| 色情五月丁香| 久久草视频污视频| 91性色| 91成人精品在线播放| 色色色色色色色色色色色色色色综合| #NAME?| 伊人青青草久久| 丝袜美腿丝袜| 亚洲一级特黄大片在线播放91| 五月丁香综合网| 玖玖爱免费观看视频| 激情综合五月婷婷| 中文熟女五十乱码在线| 国产精品高清2021在线| 日韩草久视频| 久久久999国产精品| 久久久亚洲Av| 欧洲无码一区二区| 久久老熟女| 日韩无码黄色片| 一区二区三区四区五区高清无码永久视频 | 欧美大香蕉97| 2021国产成人精品久久| 色播五月婷婷| 国产在线激情| 欧美系列在线一区二区| 超碰97欧美日韩| 国产AAAAAABBBBB| 亚洲人妻一区二区三区| 亚洲丝袜在线观看| 欧美黄色大香蕉一区二区| 亚洲精品蜜桃久久久久久久| 国产精品蜜臀久久久久无码AV| 天天综合网一91网| 亚洲色人| 久操高青| 欧美国产精品久久九九| 99青草| 东京热天堂网| 韩国三级一线观看久| 婷婷亚洲综合| 4虎在线观看| 五月丁香久久| 久久69| 婷婷五月天基地| 91免费看中出视频| 五月天激情小说| 伦理第一页| 亚洲性爱高潮影院| 国产精品com| 清清一区二区三区四区不卡视频| 亚洲视频中文一区| 久久久熟妇熟女国产| Av手机版天堂网| 77国产精品| 亚洲人妻中文高清| 亚洲欧洲日韩中文字幕一区| 操少妇很爽av| 91东京热男人的天堂| 午夜AV污污污| 操B视频日韩无码| 91麻豆天美传媒HD| 欧美一区二区三区入口| 91 丝袜在线| 国产免费一区在线观看| 91N欧美| 日韩精品一区二区三区色欲| 国产精品呦一区二区三区| 日本黄色精品专区网站| 人妻色偷色噜| 中国黑人三级片网站上区| 五月丁香成人网| 蜜臀久久99精品久久综合| 夜夜爽夜夜爽| 日本性爱欧美性爱| 国产伦精品一区二区三区视频女| 热热色色综合| 午夜视频黄| 色情成人五月天| 中文字幕av丝袜| 密乳视频在线| 91九色在线| 中文字幕精品乱码| 色综合久| 99999精品成人| 国产精品国产精品国产| yazhouzaixian| 欧美亚洲日韩人妻在线观看| 精品无码久久久久| 久久久久久久久一区二区三区| 亚洲精品一二区| 夜夜夜久久| 天天干夜夜鈤| 美女黄频a美女大全免费皮| 亚洲自拍欧美国产首页网曝| 欧美亚洲情色| 色五月婷婷在线| 熟妇女人妻呻吟久久AV| 999亚洲国产视频| 中文一区二区婷婷视频| 日韩激情啪啪| 免费观看国产小粉嫩喷水精品午| 91无码西班牙视频在线| 天天夜夜rb| 亚洲一二三四区在线免费看视频| 日本加靬比网站发布页| 极品丝袜无码| 亚洲欧美精品一区天堂久久| 大香蕉手机视频| 亚洲一卡2卡3卡4卡乱码网站 | 在线观看视频91| 日夜精品| 99热综合在线| www亚洲欧美| 狠狠操天天干| 99精品在线观看| 最新三级网址| 五月天久久综合网| 日韩性爱啪啪视频| 欧美在线91| 99热这里都是精品| 日本免费二区三区| 欧美日本不卡| 中文熟女五十乱码在线| 亚洲男人的天堂网| 亚洲国内精品成人不卡| 神马久久网| 91精品人妻一区二区三区蜜桃臀| 青娱乐91| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 久久黄人人爽视频| 91精品国产91熟女| 玖玖久久久| 欧洲亚洲人妻无码高清久久三区四区| 人妻精品一区一区三区蜜桃91| 欧美97视频| 国模不卡一本二本三电影| 亚洲男人天堂2012| 久久久久久久久久黄色网| 日日骚 av| 青青草日本中文字幕| 欧美性色综合网| 粉嫩国产精品久久久| 91色图片| 91天天爱| 后入日本1234| 亚洲性天堂| 久久 精品| 亚洲欧美另类图片| 美日韩男女操屄视频| 亚洲AV麻豆Aⅴ无码电影一| 天天视频黄| av无线看| av资源在线播放天堂| 精品色色| 欧美一区二区三区四区综合| 日本欧美韩国国产在线| 日本人人操人人操| 天天做天天爱天天高潮| 少妇国产不卡| 欧美玖玖爱免费玖玖| 熟妇女伦乱视频视频| 欧美亚洲首页| 自拍偷拍草一草| 亚州免费啪啪视频| 婷婷久久久| 清纯唯美激情四射| 搡老女人老91妇女熟女| 精品对白久久不卡| 天堂俺去俺来也www久久婷婷| 国产一区二区三区导航| 超碰97欧美在线| 日韩av一级黄片| 亚洲,欧美,春色,另类| 99操| 一区二区三区麻豆| 欧美探花网| 99久久99九九99九九九| 色第一页| 人人操人人操人妻人| 日韩免费a级毛片无码a∨| 一本一道波多野毛片中文在线| 五月丁香婷婷色| 一区| 亚洲av青草久久一区二区| 乱伦图av| 少妇毛片久久| 国产丝袜啪啪| 亚洲日韩美女中文字幕乱| 午夜天堂精品久久久久91| 亚洲青色欧美| 国产成人欧美精品在线| 麻豆这里只有精品| 国产久久日| 久久久97| 久99| 淫穴高潮色图| 最好看的中文字幕在线2018| 欧美综合97www| 欧美亚洲在线| 免费中文在线| 色网在线| 亚洲国产精品成人综合| 97超碰美国| 老熟女综合网 | 日本高清有码网址视频| 日日夜夜青青草母狗| 人妻第一页| 亚洲精品亚洲人成在线麻豆| 97超级欧美| 久久的免费性爱视频| 狠狠操夜夜操蜜桃视频三区| 91精品国产长腿丝袜美女| 岛国色情视频在线观看| 九X超碰| 欧美精品三区| 69超碰综合| 好涩综合| 五月丁香啪啪啪| 欧美综合中文| 99综合视频一体| 美女AV一区二区| 国产精品蜜乳AV| 久操操| 粉嫩av在线| oumeisetu综合| 亚洲人妻爽爽爽| 亚洲欧美国产日本一区二区三区| 中文字幕第95页| 激情干在线| 日本天天干天天日一区| 日本一区二区做爱的视频| 在线观看午夜婷婷久久久久清性观看| 日本免费一级AAA大片器| 久久国产对白激情浪潮| 国产野战露脸在线播放| 人妻丝袜肏逼| 精品一区二区人妖| 97久久超碰日韩精品| 久久五月综合| 国产精品九九九| 午夜久久一区二区无码中出| 亚洲熟伦熟妇AV无码春色| 亚91亚洲网| 久久性生大片免费观看性| 亚洲熟妇乱女区二区三区| 99久久亚洲精品无码毛片潘甜甜| 99热免费精品| 性色av网站| 偷偷人人精品女女久久| 蜜色网色哟哟| 精品人体无圣光凹凸| 97超碰中文字幕| 精品久热| www熟女乱伦com| 五月开心久久AV官网| 天天日天天干天天整| 91精品网站| 91麻豆天美国产| 欧美视频一区二区在线| 欧美情色亚洲| 97色视频在线| 99在线观看| 国产婷婷综合在线观看| 941超碰| 私色综合网| 成人日韩3| 国产9熟妇视频网站| 精品久久久中文字幕不| 人妻在线视频| 亚洲无码com| 亚州Av天美传媒| 欧美黑人猛交春色影视大全| 国产大学生口爆吞精合集| 日韩一卡二卡三卡| 久久国语| 天天干2019| 国产强奸超碰AV| 精品综合久久久久久五月天| 亚洲人精品午夜不卡| 欧美78p| 色一色综合网| 亚洲AV成人无码一二三久久| 夜夜夜爽www精品视频| 精品97精品97| 亚洲精品 大香蕉| 一区二区影院| 超碰精品国产无码| 美女网站91| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 猛交交| 久久精品国产96精品亚洲拳交| 国产又黄又粗又猛大片| 中文字幕一区二区无码成人 | 国产性刺激| 久久思思热| 亚洲欧美一区二区三区一猛片| 99国产精品久久久在线播放| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 丁香五月综合| 日韩午夜啪啪视频| 精品在线观看视频在线| 亚洲va有码在线天堂| 黄色免费一级在线毛片| 亚洲国产97| 午夜操一视频一区| 人妻夜爽夜夜爽| 尤物视频偷拍免费| 天美一区在线| 免费超碰97久久| 97精品视频网站| 九九夜精品九九在线| 国产精品经典一卡久久久 | 啊啊啊用力在线观看| 久久五月份| 久久久爆乳翘臀一线天伦理视频| 日本日逼视频网| 不卡免费av在线播放| 亚洲蜜桃V妇女| 国产激情av女片自拍| 日本女优在线视频福利| 人人干人人操人人..com| 黄色网址在线免费观看| 91人妻尻屄视频| 亚洲 欧美日韩 另类| 九九热久久99精品re| 国模无码人体一区二区三| 精品人妻中文字幕高清| 日韩精品中文字幕人妻| 日韩欧美午夜一区二区| 国产精品毛片?v一区二区三区| 日本成人A片网站| 日韩精品国产一区二区| 操逼不卡中文字幕| 亚洲综合精品国产一区| www.婷婷| 日韩97视频!在线| 五月婷婷hd| 熟女网站最新| 97爱爱官网| 久久精品久久久久久久| a片自拍直播视频| 日本成人A片网站| 日韩精品黄片免费观看| 伊人91| 亚洲熟妇乱女区二区三区| 爱爱动态试试看6 0秒| 国产青青美女玩逼视频| 欧美日韩精品久久久久东北老熟妇| 亚洲欧美综合图片| 中文字幕av亚洲精品| 午夜视频好爽啊| 亚洲欧美激情在线视频| 国产原创精品| 人妻无码视频一区二区三区久久| 精品人妻丰满熟妇一区二区三| 亚欧免费观看视频| 人人妻人人狠人人| 四虎永久在线精品免费网址| 欧美色日| 色欲天天综合久久久无码网中文| 欧美色视频在线| 99热这里都是精品| 超碰碰激情97+久| 天天天干977| 国产精品久久久无码aV去| 777奇米影视777四色| 操穴国产| 97国产中文| 日韩在线地址一| 人人爱夜夜爱| 成人三级片无码| 精品一区二区三区蜜桃| 91美女在线看| 熟女中出视频| 91麻豆天美| 婷婷成人久久久精品| 大稥蕉免费视频这里只有精品| 青娱乐国产精品| 超清福利精品视频在线| 久久精品久久久久久久| 91国产丝袜美女| 高跟伊人julia ann| 天无日色综合| 五月婷婷六月激情| 在线观看av区| 国产男人又猛又粗又爽| 又大又大又大又粗爽高潮观看| 在线观看视频91| 亚洲熟妇AV日韩熟妇在线| 中文有码9| 欧美人与动性人交a| 国产日韩精品无码去免费专区国产| 亚洲天堂AV在线播放| 国产欧美日韩在线不卡第一页| 五月丁香在线| 久久精品视频28| 青青草女人天天干| V A在线| 亚州免费啪啪视频| 激情五月天婷婷| 日韩色| 青青草色情网站视频| 97精品97久久| 日本熟妇人妻中出视频| 久久成人东京热人妻| 亚洲操人| 欧美色图中文字幕| 91网站18+| 亚洲熟女av中文字幕| 国产日韩欧美操逼视频| 91色色色| 日韩精品熟妇| 亚州欧美在线| www.伪伪| 又黄又爽在线观看视频 | 天堂蜜桃无码视频一区二区| 国产白丝在线| 久一区久久蜜桃| 一区=区三区视频| 97超碰美女| 亚洲AV乱码专区国产噜噜亚洲 | 久久香蕉综合一本到3atv| 丝袜加勒比| 国产九月婷婷| 免费久久一级毛片大黄| 欧美韩国你懂得在线 | 超碰免费在线| 操屄日韩| 中文字幕乱偷人妻久久艾草网| a在线视频免费观看| 美女啊啊啊啊啊| 精品人妻一区二区乱码一区二区| 尤物一级在线免费观看| 亚洲色图图片| 久久一本大香蕉 | 97啪啪| 五月丁香激情综合| 97精品视频在线| 久久riav中文精品| 国产性刺激| 在线观看成人性爱免费小视频| 久久人爽| 午夜婷婷| 精品日韩人妻精品一二三区| 狠色婷婷久久一区二区三区_| 久久精品三级影视| 97天天摸天天爽| 日韩精品99久久久久久中文字幕 | 一区二区高清视频| 青青欧洲黑| 九九成人| 免费的很黄很污的全部视频| 午夜传煤十二区精品| 欧美精品久久96人妻无码| 久久一区二区三区入口| 亚洲中文字幕熟女| 97国产精品久久久久| 欧美超碰9798| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 五月天加勒比啪| 91亚·色| 亚洲中文一区二区三区视频| 一级片视频啪啪| 东北女人性交| 亚热日本熟女| 国产伊人自拍| 人人插人人搞人人操| 大香蕉乱级| 色色97爱| 91视频综合在线| 一区二区三区四区五区高清无码永久视频 | 欧美高清第一页| 亚州图片第一页| 青青草视频在线观看一区二区| 丁香婷婷啪啪| 国产精品一区午夜福利| 中文操逼字幕| 天啪| 麻豆尤物视频网| 91伊人久久在线| 美腿丝袜高跟网免费视频免费视频| 丁香五月激情网| 中文自拍欧美影视| 久草国产在线视频| 五十路六十路七十路熟婆| 国产精品操| 日韩久射综合| 欧美综合综合| 一二三四区电影| 欧美一品道| 动漫av中文| 日韩中文字幕av在线播放| 亚洲天堂在线怕怕视频| 亚洲情欲| 超清中文乱码字幕| 综合欧美亚洲| 久草在线| 国产精品96| 成人久久久| 九九九九九九九九九国产精品| 夜夜嗨免费视频| 香蕉大久久久| 日韩丨制服丨中文|在线| 97热视频在线观看| 精品欧美日韩在线观看| 亚洲熟女少妇免费视频| 99色在线| 国产精品一区二区三区在线| 九九九九热只有精品| 欧美色老汉| 91美女精品| 久久内射| 绯色一区二区三区不卡少妇| 美女被啪到深处抽搐视频| 91精品国产91久久青草| 亚洲日韩av专区无码| 精品国产三级av韩国在线| 欧美特大AA级黄片| 日本视频一区二区三区| 手机看片1025| 人妻熟女午夜精品在线| 国产精品乱人伊人网| 91国产大片| 天天干人妻| 色偷偷综合91久久噜噜| 97超碰欧美精品| 国产成年女黄特黄| 久操网视频| 综合一区中亚洲国产成人综合精品 | 蜜桃不卡一区二区| 欧美精品欧美精品系列 | 大香交| 婷婷久月| 国产传媒操逼视频| 99色热| 亚洲欧洲精品成人| 91n.欧美| 3PAV乱伦视频| 色呦呦呦在线观看视频| 开心激情站| 欧美色一二三| 少妇天堂| 黄色片,com| 色色色热| 国产青青美女玩逼视频| 欧美东京热青青草| 99re公开精品免费视频| 丁香五月天激情综合| 91高跟美女在线播放| 亚洲精品国产拍免费91在线| 自拍内地三级在线观看| 丰满的三级少妇欧美久久久| 日本一区二区三区精品| 超碰色美女| www.久久制服糖| 九九伊人网| 日韩欧美偷拍美女视频| 国产97在线视频| 强奸乱伦av电影| 日本丝袜美腿人妻九九| 0755午夜福利视频| 可能人人看人人摸| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 综合色99| 加勒比人妻综合| 成人午夜高潮av猛片| 久久婷婷伊人| 久久久草草精品| 精品人妻1区| 亚洲精品97在线| 欧美亚洲中文字幕| 人人干人人操人人..com| 国产嫩草精品A88AV在线| 亚洲色人阁| 中文字幕乱码在线| 激情婷婷五月天| 国产精品午夜精品| 女人 A一级| 自拍视频大全亚洲专媒视频/一区二区三区| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 欧美成人免费在线观看| AV 少妇 人妻 偷拍| 国产精品97超碰| 日本高清_区二区三区 | 高清无码学生妹高潮| 啊啊啊啊好疼| 丁香五月天啪啪| 日韩日韩日韩-国产乱码精品一区二区| 一级片在线观看高清无码| 粉嫩国产精品久久久| 天天干天天操天天操夜夜操天天操 | 激情婷婷丁香| 91中出视频| 五月大香蕉| 欧洲精品二区| 人妻啊啊人妻啊| 92一区二区| 日本特黄f c2| 久久久97| 啊嗯好大视频在线观看| 色波多| 99999精品成人| 国产成人99久久亚洲综合| 中文字幕人妻色偷偷久久皮| 亚洲无码太久| 欧美色色人| 日韩欧美国产高清视频| 国语精品av| 97人肏| 中文字幕精品免费一区二区| 国产午夜视频| 久久久久久久国产a∨| 一本色道久久综合狠狠操| 九九综合久久| 亚洲天堂久久久久久粉红视频| 久操B网| 日本精品网站在线中文| 亚洲一二三四区在线免费看视频| 五月天色色网站| 搡老女人老熟女91| 九九九九九用不成了| 国产亚州精品美女久久久免费| 日韩内| 精爱久久| 人人天天干干| 欧美第二页| 97超碰亚洲| 中文字幕在线日亚州9| 超碰在线人人射| 精吧天堂| 美国美女AV在线| 人人操人人操人人操人人操人人操人人人11.CM | 日日夜夜噜| 亚洲综合另类| 国产日逼视频| 成人国产二区三区在线,男女精品。| 亚州成人A√| 人人操人人摸人| 一区在线精品中文字幕| 91美女視頻| 精品久久久久,69国产成人精| 欧美日韩另类在线| 中文不卡视频| 极品色电影院| 久久综合日韩亚洲欧美| 国产伦乱91| 香伊人在线| www.91视频网| 久久精品99久久久久久| 日本免费一区二| 大香蕉乱伦视频网| 久久久久久亚洲中文| 久久超碰网| 9九九国产| 亚洲一本色码中文字幕| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 国产真实子伦对白| 99AV| 91美女视频电影| 狠狠热这里都是精品| 开心激情站| 欧美劲爆视频一区二区| 日韩黄片影院| 久久老女人| 国产精品一区二区三区在线| 亚洲丝袜99| 97日视频| 亚洲男人的天堂V| 蜜臀国产AV中文字幕| 日韩免费性爱视频在线观看| 欧美十八禁导航成人| 国产辣妈在线视频福利| 九九九九九九视频免费| juliaann欧美丝袜办公室| 亚洲天堂,男人| www.超碰在线| 国产一| 色综合一本| 91无码精品| 日韩无码服务区| 中文欧丝袜诱惑| 日韩精品9区| 亚洲污污网站| 九九九九精品一区| 成人欧美日超碰| 偷拍色图| 91美女国产在线| 综合色久欲| 熟妇一区,二区,三区。| 97 国产精品| 精品一区二区2| 久热这里| 无码人妻一区二区三区四区老鸭窝| 亚洲中文字幕av | 日本理论在线| 色区久久| 麻豆天美久久91| 黄色二级片网站| 97精品久久久久久久| 久久精9| 中文无线日韩一区| 久久午夜神马| 久久夜夜| 成人乱人伦一区二区| 中文字幕aⅴ在线视频| 欧美很很操视频| 2010男人的天堂| 日本不卡码黄色| av东京热男人的天堂| 国产视频一区二区免费| 人人扣人人操| 爱射综合| 天天天天天超碰| 91色人| 91视频综合| 日韩综合无码色欲vv| 牛黄色久午久| 久久大香蕉手机高清| 天天天天做夜夜夜夜做| 91天堂丝袜美腿| 翔田千里AV无码秘 三区| 人妻丰满熟妇一区二区三| 国产一区二区欧美日本| 天天添天天干电影| 久热久| 精品日日人妻| 国产强奸91| 日本久久精品| 日韩av色图综合| 日日骚av| 岛国片在线视频网站| 九九久久99| 超碰中文字幕人妻草一区| 99re99在线视频| 午夜视频久久久久一区| 99操逼| 亚洲诱惑| av三级电影在线播放| 在线观看国产黄色| 狠狠操一区二区| 99re久久| 女人喷水视频在线观看| 天操天操夜操夜月操月年年操| 亚洲色图8| 欧美黄片免费在线观看视频| 美国美女AV在线| 97操97干| 欧美日韩香蕉| 久草婷婷| 精品人妻一二三| 婷婷五月色| 人人爽夜夜玩视频| 中文字幕乱码人妻二区三区| 国产av高清版| 91性网| 操逼网免费无码视频| 久日91在线| 大二网站亚洲| 天美国产精品| juliaann欧美丝袜办公室| 久久一区二区三区入口| 极品色电影院| 做爱A级亚欧| 嗯嗯啊啊好疼| 欧美激情性久久久久久| 亚洲色图 欧美热图 清纯唯美 另类自拍| 女生看匆91网站| 国产精品熟女丝袜一区二区| 97丝袜亚洲在线播放| 四虎国产精品永久地址入口| 欧美精品 - 91爱爱| 亚洲av国产av综合av卡| 亚洲AO在线| 香港澳门日本三级网站| 日韩紧密久久| 日本爽爽爽爽爽爽免费视频| 精品网站9999| 国产精品国产亚洲区艳妇糸列| 亚洲熟女国产综合另类| 亚洲伊人成综合成人网| 黄色二级片网站| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | com 首页 18岁 禁区 女优 免费 精选 同城 | 78综合网| 欧美真人抽搐一进一出gif| 久久蜜桃综合网| 三级AV入口| 久草精品一区| 黄色欧美性爱视频| 国产91丝袜 在线播放| 天天做天天爱| 操逼操2| 粉嫩久久久久| 青草伊人网| 亚洲少妇综合在线播放| 综合色图区| 久久网亚洲| 激情久久久| 电影69乱码96| 人人看人人插| 精品9999| 香一区二区三区| 欧美精品久久久久久久久88| 中文字幕女同在线| 成年人三级黄色片视频| 中出789在线视频| 久久精品久久久久久久久| 67194无码不卡| 国产粉嫩蜜臀av一区二区三区| 午夜精品一区二区三区三上悠亚| 国产精品一区二区三区四区五区| 五月天婷婷久久| 全国男人天堂网| 久久xx| 日本一二区不卡| 中日无幕一二三四区| 人人搞人人插人人操| 日韩天堂av电影在线观看 | 91老司机精品| 日夜啪电影| 免费观看欧美日韩操逼视频| 好色综合| 综合激情97 | 国产高清自拍| 九9热伊人| 夜夜操二区| 最新三级网址| 欧美激情精品| 欧美中文狠| 99无码精品| 国产精品久久久久久久AV大片| 婷婷激情五月综合| 久久av色| 99操逼| 一个色导综合| 亚洲色图片区| 黄呦呦在线| 校园春色 男人天堂| 在线综合色| 操屄日韩| a啊啊啊啊啊啊啊啊一区二区| 超碰 av 女人天堂| 伊人网av| 江都AV在线| 精品一区二区亚洲国产| 亚洲爽图| 欧美亚洲小说| 国产女人视频三四五区| 99精品人妻| 东京热毛片177b2viP| 99热在线播放| 亚洲毛片久久| 午夜无码熟妇丰满人妻| 色狠狠综合噜一二三区| 婷婷久久综合久| 逼逼逼逼操操操操操操操操操午夜剧场 | 久久av网| 久久久草成人网站久久久草成人久久久草久久久 | 国产黄片精品在线| 国产综合色精品在线观看| 欧亚 另类 久| 欧美最大综合网| 嗯嗯啊啊好疼| 美女的肌被草喷水视频| 精品国产嫩穴视频| 久久草草欧美精品| 91中文在线| 99热99色| 国产动漫操逼视频| 亚洲日韩成人性爱视频| 成人性爱视频在线看| 亞洲久久直播| 色香蕉影院| 好湿好紧好爽 视频| caopeng97人妻| 色偷综合| 水滴偷拍| 男女啪啪网站免费视频| 青草草免费网站av| 日韩黄色一区二区三区| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 色老大| 成年无码动漫av片无尽在线| 成在线人在线观看视频| 青草青草久热| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 色噜噜人妻丝袜a∨先锋影| 伊人久久婷婷| 精品人妻视频入口| 国产综合在线视频网站| 偷窥自拍A片| 国产伦精品免编号公布| 亚洲综合骚逼| 性色A∨91| www.伪伪| 丁香六月婷婷久久综合| 蜜臀AV成人精品蜜臀| 美女十八禁| 国产60页| 国产一区二区三三视频| 秋霞欧美性爰视频| www鬼畜国产男人的天堂| 亚洲揄拍网| 玖玖资源视频一区二区三区| 久久九色| 久久直播国产| a网站免费观看| 青青操少妇| 欧美性第1页| 亚洲av青草久久一区二区| 精品中文字幕第一页| 啪啪啪大香蕉| 大香网伊人久久综合网eew| 久久精品六区| 亚洲 欧美 日韩 国产一区二区| 亚洲成人美女无吗| 中日无幕一二三四区| 欧美一区二区三区成人性生活| 99热在线播放| a天堂视频| 亚州成人a∨| 九九五月天| 成人性爱av| 96精品在线| 伊人网一本| 亚瑟国产精品久久无码| 亚欧精品久久久久久久久久久| 91高潮喷水美女| 欧美片第一页| 99热这里只有精品9| 骚女高跟AV在线| 免费视频在线一区二区不卡| 六月丁香五月婷婷| 激情四射婷婷六月天| 国产精品成人久久一区二区三区| 亚洲中文字幕97久久精品少妇| 四虎影视永久在线观看精品免费网站| 黑人免费福利视频| 大香樵伊人网| 婷婷精品久久av影视| 国产aⅴ无码片毛片一级网站| 久久久精久久久| 9丨久久九九九 | 日韩欧美福利视频看看| 91 刺激在线| 日本免费二区三区| 97亚洲中文| 91欧美| 91欧美情色| 欧美人人AAA| 97国产综合欧美| 强奸乱伦Av网| 天堂涩涩| 无码精品人妻一区二区三区妖精| 97免费视频网| 久久成人国产精品| 午夜天堂精品久久| 超碰免费人妻人人| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 日韩精品 欧美激情| 久久亚洲婷婷| 九九九999久久久网站| 六月婷婷色综合| juliaann丝袜| 国产精品一二三免费网站| 密臀视频三区免费网站| 人人色97| 精品欧美老熟女一二区| 亚洲AV资源| 久久男人精品| 2019亚洲男人天堂| 亚洲国产激情国产av| 深夜视频| 亚洲AV乱码专区国产噜噜亚洲| 三级日韩一区二区三区| 夜草欧美| 欧美黑人精品一区二区| 香港久久久| 精品人人| 在线综合 亚洲 欧美中文字幕| 亚洲情色一区二区三区| 一个人免费HD91视频| 快灬快灬 一下爽蜜桃在线观看| 九九毛片这里只有精品| 中文字幕乱码人妻二区三区| 青青草日韩免费观看高清在线| 综合色啪| 最新日本中文字幕| 乱欲性色| 日本99视频| 狠狠久久手机视频精品| 岛国不卡超碰护士AV在线播放| 99综合| 牛牛操视频逼| 欧美三级偷拍| 日本裸体久久色噜噜| 欧美日本国产日韩激情视频| 精品97久久| 国产成人主播| 天天做天天爱天天爽| 无码高清少妇久久| 97 国产精品| 欧洲中文字幕| 日本三级R| 无码137片内射在线影院| 国产AV天美传媒一区二区三区| 日本91白丝| 久草网站免费在线观看| 97超碰人妻| 国产女主播视频在线观看| 爆乳免费黄网站| 久久久久国产一区二| 亚洲无码国产探花在线观看| 色哟哟av| 久久久久久91香蕉国产| 99精品在线| 亚洲色 国产 欧美 日韩| 欧美第一页| 欧美精品系列| 欧美午夜视频| 亚洲人精| 国产亚洲99久久精品| 日韩精品免费高清视频在线| 蜜臀久久99精品久久久| 亚洲成人AB| 亚洲综合骚逼| 色天使大香蕉| 色蜜AV| 妺妺跟我一起洗澡没忍住| 国产特级毛片AAAAAA高潮流水| 91精品人| 上特色A在线| 国产在线激情| 老色鬼成人精品视频下载大在线观看| 99www.bibizy香蕉资源国产一区二区三区高清 | 国产成人在线观看综合| 污污汅18禁网站在线永久免费观看| 色哟哟 日韩精品| 精品国产乱码久久| 丝袜综合网| 国产免费小视频| 久久99干一本高清| 九九九九九九免费视频| 97超碰总站| 色亚州人久干视频在线观看免费版| 骚逼一区二区| 五月天久久婷婷亚洲| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 26uuu国产亚洲综合| 91性高朝久久久久久久久| 人妻一区二区三区四区视频| 国产精品美女| 看日韩黄片| 99精品国产户外露出| 日本操逼视频在线| 亚洲巨爆乳一区二区三区四季网| 免费操逼91| 亚洲国产成人精品久久久国产成人一区二区| 欧美激情性久久久久久| 9997se| 国产精品69久久久久孕妇欧美| 999熟女精品| 亚州精品人妻一二三区| 97伊人超碰| 五月天伊人网| 日本成人在线不卡一区二区三区 | 久热这里只有精品9| 97欧美综合| 亚洲人成网站7777| 大学生口爆吞精| 夜间福利片1000无码| 蜜乳av首页| 久久久久13| 鸥美精品一区二区久久婷婷| 18禁久极品美女久久哦哟呀!| 男人天堂一区二区| 2025亚洲男人天堂| 美日韩一二三区| 新91视频.cmp| 狠狠操狠狠操操| 免费福利视频中文字幕| 国产乱码精品一区二区三区四川| 久久婷色| 青青草原综合久久大伊人精品| 久久久99999久网站| 蜜臀99久久精品| 欧美狠狠干| 无码精品久久久天天影视| www.人人cao| 精品久久久av| 青青草中日韩在线| 97视频免费在线观看| 99re公开精品免费视频| 婷婷导航| 欧美aⅴ99久久黑人专区| 啪啪啪男女亚洲中文字幕99| 51国产午夜精品视频| 欧美特大黄一级片片免费| juliaann精品熟女一区| 国产精品高朝久久久久久久| 另类天堂| 91干熟女|