精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

讓軟件支持多個Linux發行版,動態庫不兼容?三種解法!

系統 Linux
從開發者面對的動態庫,對Linux發行版兼容性差的缺點和痛點出發,本文梳理問題、探討并分享三種解決思路。

圖片圖片

從開發者面對的動態庫,對Linux發行版兼容性差的缺點和痛點出發,本文梳理問題、探討并分享3種解決思路。

Linux系統如何知道哪些路徑下有動態鏈接庫可供鏈接加載?可借助ldconfig緩存的信息。

ldconfig 是一個工具程序,用于更新動態鏈接器的緩存。動態鏈接器在加載動態庫時,會先查找緩存,如果緩存中已經存在對應的動態庫的記錄,則直接使用緩存中的信息,否則再根據環境變量LD_LIBRARY_PATH從對應的目錄內找動態庫文件。

那么ldconfig的緩存,究竟存儲在哪里?在內存嗎?還是在文件系統?

ldconfg 對動態庫路徑信息的緩存,存儲在哪里?

可以通過命令查詢當前系統已緩存了哪些動態庫:

1.命令  ldconfig -p  查詢當前系統已緩存的動態庫

以下通過命令  ldconfig -p  查詢當前系統已緩存的動態庫,包含庫文件名稱、版本信息、體系結構、庫文件所在路徑。以下查詢結果僅展示常用的動態庫,比如 libstdc++,libmysqlclient等動態庫,

user@linuxlibs:~$ ldconfig -p
785 libs found in cache `/etc/ld.so.cache'
…… # std-c++ 動態庫
        libstdc++.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libstdc++.so.6
        libssl3.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libssl3.so
        libssl.so.3 (libc6,x86-64) => /lib/x86_64-linux-gnu/libssl.so.3
        libssl.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libssl.so
        libssh.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libssh.so.4
…… # python核心動態庫
        libpython3.10.so.1.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpython3.10.so.1.0
…… # 線程相關的動態庫
        libpthread.so.0 (libc6,x86-64, OS ABI: Linux 3.2.0) => /lib/x86_64-linux-gnu/libpthread.so.0
……
        libodbc.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libodbc.so.2
        libodbc.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libodbc.so
…… # mysql 客戶端動態庫
        libmysqlclient.so.21 (libc6,x86-64) => /lib/x86_64-linux-gnu/libmysqlclient.so.21
        libmysqlclient.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libmysqlclient.so
……  # 維護鏈接信息的動態庫
        ld-linux-x86-64.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
Cache generated by: ldconfig (Ubuntu GLIBC 2.35-0ubuntu3.4) stable release version 2.35

2.介紹一個大多數可執行文件都會鏈接的動態庫ld-linux-x86-64.so.2

上面最后的 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 是 Linux 系統的一部分。這個庫主要用于加載和運行其他動態鏈接庫。

當一個程序需要使用其他動態鏈接庫中的函數時,它會通過調用 ld-linux-x86-64.so.2 來加載所需的動態鏈接庫,并解析其中的符號(函數、變量等)。這樣,程序就可以在運行時動態地使用其他庫中的功能,而不需要在編譯時將這些庫靜態鏈接到程序中。

3.ldconfig的緩存文件,在這里

我們注意到輸出信息第一行為785 libs found in cache /etc/ld.so.cache (在緩存文件中找到785個庫文件記錄),說明 /etc/ld.so.cache 是 ldconfig 搜索動態庫時依據的緩存文件,該緩存文件記錄了785個動態庫文件的信息,每條信息記錄了 key=>value 的這樣的鍵值對形式,例如libmysqlclient.so.21 (libc6,x86-64) => /lib/x86_64-linux-gnu/libmysqlclient.so.21。用 ls -lht 命令查看該緩存文件的屬性:

user@linuxlibs:~$ ls -lht  /etc/ld.so.cache
  -rw-r--r-- 1 root root 48K Dec 11 10:45 /etc/ld.so.cache

user@linuxlibs:~$ file /etc/ld.so.cache
  /etc/ld.so.cache: data    #類型是二進制數據文件,有內部格式無法直接查看內容

從中,我們第一可以明確的是,緩存文件存儲在磁盤。

第二可以推斷,磁盤的緩存文件,可能有通過mmap()方式映射內到存中,以滿足系統各類軟件頻繁獲取動態庫信息的效率要求。這個猜測后續會進一步驗證。

這些動態庫的版本如何被linux系統安裝管理的呢?

首先,Ubuntu linux的動態庫文件,需要通過apt安裝后才會出現在系統庫目錄內。例如C++ 程序在運行時需要鏈接的動態庫libstdc++.so.6.0.30,可通過apt install 安裝包 libstdc++6 獲得。

#可通過 dpkg -L 查詢軟件包 libstdc++6 安裝后新增了哪些文件:
user@linuxlibs:~$ dpkg -L libstdc++6
 /.
 /usr
 /usr/lib
 /usr/lib/x86_64-linux-gnu
 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
 /usr/share/doc/libstdc++6
 …… 略

安裝后,允許存在多個不同版本的libstdc++動態庫包,但系統啟用的只是其中一個:

user@linuxlibs:~$ ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6
  …… /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.30

我們看到這里的libstc++動態庫版本號是6.0.30。但千萬不要誤以為這是Linux采用的C++標準庫的代碼版本號。動態庫版本號 6.0.30 表示該動態庫的版本信息。版本號通常由三個部分組成,分別表示主版本號、次版本號和補丁版本號。

動態庫的版本號通常用于標識軟件或庫的不同版本,以便用戶和系統能夠識別和管理不同版本的軟件或庫。在使用動態庫時,程序會根據需要去加載相應版本的動態庫。

動態庫的版本號的確定,通常是由庫的開發者或維護者根據庫的更新和發布情況分配的。因此,即使庫的代碼進行了重大更新,版本號也可能只進行了微小的變化。所以庫的版本號并不一定與庫的代碼版本直接相關;即使同一個vim軟件,在不同的Linux發行版有不同的打包維護人,雖然都從軟件官方獲得同一源碼版本號的vim的代碼,但不同Linux發行版的軟件打包維護人根據自己發行版的情況決定編譯后打包的庫文件的版本。

當然,也有些軟件采用兩個版本號相等的方式發布軟件版本和代碼,比如Ubuntu的維護者將OpenGL項目的動態庫版本與代碼版本保持一致,動態庫版本后面以-數字表示該版本代碼的第幾次正式打包,這個數字每次正式打包前都要+1,如圖中的2.2.0-4為Ubuntu 22.04系統的libglew2.2軟件包的2.2.0版本的第4次打包入庫。

雖然這個版本經歷了4次打包發布,但libglew-2.2.0的4次生成的軟件包,在安裝后,路徑中的動態庫的文件名仍保持.so.2.2.0結尾。

這是因為4次打包期間,庫代碼接口沒變,自然不應該修改X.Y.Z中的任何一個數字。以免破壞 /usr/lib/x86_64-linux-gnu/libGLEW.so -> libGLEW.so.2.2.0 這種libGLEW.so軟鏈接對實際動態庫文件libGLEW.so.2.2.0的鏈接效果:

開發者可以從哪里查詢,動態庫文件的版本號與代碼版本號的對應關系?

如果開發依賴了 OpenGL(v1,v2,v3都有,libGLEW、libGLut、libGL、libegl-mesa0等名稱繁多) 這種帶有較多版本歷史包袱的開發庫,有時必須確定系統已安裝的OpenGL庫的版本號跟開發要求的庫的代碼版本號的是否匹配,才能確保代碼調用的函數跟實際運行環境的庫的版本能兼容。

那么如何查詢呢?這個問題沒有為唯一答案,軟件的發布方式和維護形式太多了。但那些主流的Linux發行版的軟件源安裝的軟件包往往采用了近似的策略,方便了用戶查詢幫助信息。如果你的Linux是Ubuntu、Centos,那么安裝后可以直接從命令中獲得大部分信息,包括動態庫版本說明:

(1) Ubuntu使用命令$ apt show libglew2.2 查詢軟件幫助信息

(2) Centos 使用命令$ yum info glew-devel 查詢軟件幫助信息

[root@device78969 ~]# yum info glew-devel
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.163.com
Available Packages
Name        : glew-devel
Arch        : i686
Version     : 1.10.0
Release     : 5.el7
Size        : 172 k
Repo        : base/7/x86_64
Summary     : Development files for glew
URL         : http://glew.sourceforge.net
License     : BSD and MIT
Description : Development files for glew

Name        : glew-devel
Arch        : x86_64
Version     : 1.10.0
Release     : 5.el7
Size        : 172 k
Repo        : base/7/x86_64
Summary     : Development files for glew
URL         : http://glew.sourceforge.net
License     : BSD and MIT
Description : Development files for glew

最后,分享3個思路,解決運行時動態庫不兼容問題

這是很多開發者發布軟件包時最頭痛的,系統自帶的動態庫版本,與軟件運行所要求的動態庫不兼容,直接影響了軟件在Linux當前系統的正常功能。

評論區有網友指出,動態庫最大的弊端是跨Linux發行版部署的時候,常因為依賴的動態庫版本在不同Linux上實際安裝的是不同版本,兩個版本的動態庫未保持向低版本兼容,導致主程序找不到合適的依賴庫版本而無法運行。

下面介紹針對這個問題的3種解法(實際本質上是2種:被動、主動)

思路1:由shell腳本幫助載入合適的動態庫:

通過局部環境變量設置 LD_LIBRARY_PATH 和 PRE_LOAD,讓軟件優先使用受支持版本的動態庫。

LD_PRELOAD 環境變量用于指定在加載動態鏈接庫時優先加載的庫文件。通過設置 LD_PRELOAD 環境變量,你可以在程序加載動態鏈接庫之前加載你自己的庫文件,從而實現對程序行為的修改或調試。

想在局部生效 LD_PRELOAD 環境變量,可以使用以下內容寫到一個statup.sh腳本內:

#!/usr/bin/bash
export LD_PRELOAD=/path/to/your/library
./my_dir/my_programe

或:

#!/usr/bin/bash
LD_PRELOAD=/path/to/your/library  ./my_dir/my_programe

其中,/path/to/your/library 是你要加載的庫文件的路徑,最好是當前可執行文件所在目錄下的動態庫文件,以方便管理;./my_dir/my_programe為你要運行的可執行文件。

LD_PRELOAD 環境變量的使用需要謹慎,因為它可能會影響程序的正常運行,所以只建議在shell腳本內部使用,通過腳本運行后只有你的my_program受這個環境變量加載的動態庫的影響:而且會優先加載你指定的動態庫而不加載其他同名的動態庫,就避免了與系統自帶動態庫的沖突。

這種設置環境腳本的思路,在Tomcat和Pycharm的安裝方式和啟動方式中被采用。

!!! 提醒:

在使用 LD_PRELOAD 環境變量進行調試或修改程序行為時,建議在測試環境中進行,并確保對可能的影響有充分的了解,以免影響系統正常運行。

思路2:代碼編程實現本地主動加載動態庫文件,區別于思路1的被動加載方式:

下面是一段偽代碼,演示了由C代碼控制,在運行時才加載動態庫文件到進程中。一個好處是延遲了加載,而且由代碼負責檢測該動態庫是否提供了所需功能,若未提供,則卸載動態庫,再去加載其他動態庫:

#include <dll_function_headers.h>

// 定義加載動態庫的函數
void* load_library(const char* library_path, const char* symbol_name) {
    // 打開動態庫
    void* handle = dlopen(library_path, RTLD_LAZY);
    if (handle == NULL) {
        printf("dlopen() failed: %s\n", dlerror());
        return NULL;
    }

    // 查找符號
    void* symbol_address = dlsym(handle, symbol_name);
    if (symbol_address == NULL) {
        printf("dlsym() failed: %s\n", dlerror());
        dlclose(handle);
        return NULL;
    }

    // 返回符號地址
    return symbol_address;
}

// 定義使用動態庫符號的函數
int use_symbol(void* symbol_address) {
    // 定義符號的函數指針類型
    typedef int (*symbol_func_t)(void);
    symbol_func_t symbol_func = (symbol_func_t)symbol_address;

    // 調用符號對應的函數
    int result = symbol_func();
    return result;
}

int main() {
    // 假設動態庫路徑為 /path/to/library.so,符號名稱為 symbol
    const char* library_path = "/path/to/library.so";
    const char* symbol_name = "symbol";

    // 加載動態庫
    void* symbol_address = load_library(library_path, symbol_name);
    if (symbol_address == NULL) {
        printf("加載動態庫失敗\n");
        return 1;
    }

    // 使用符號
    int result = use_symbol(symbol_address);
    if (result != 0) {
        printf("符號調用失敗\n");
        return 1;
    }

    // 關閉動態庫
    dlclose(handle);

    return 0;
}

但這種方式沒有解決所有本地動態庫都無法支持當前Linux系統的特殊場景。

思路3:代碼編程實現從網絡主動加載動態庫文件,區別于思路2的方式:

這種方式仍然由本地軟件負責加載。但加載的來源改為從服務端API交互,將本地系統的版本信息告訴服務端,由服務端的數據中心提供能匹配本地Linux的動態庫文件,由本地軟件將服務端告知的動態庫文件,下載到本地。然后加載運行。

由于配備了后臺服務,且對各種需要兼容的Linux系統做了測試,準備了匹配的動態庫下載使用,所以軟件安裝包可以很小。這種方式其實也是很多軟件采用的軟件自身新版本的更新機制。

缺點是需要網絡,開發階段需要做多種Linux系統的動態庫兼容性測試,在服務端需要維護匹配的動態庫文件與信息。

適合于達到一定使用規模的軟件采用。

責任編輯:趙寧寧 來源: 深入理解Linux
相關推薦

2015-07-16 09:59:29

壁紙linux

2021-09-06 11:29:59

LinuxCutefishOS操作系統

2009-12-01 16:55:40

Live Linux

2021-12-01 05:37:38

Linux LinusLinux 系統

2020-10-28 08:00:00

LinuxLinux發行版

2009-12-21 16:27:55

2021-06-28 10:44:34

Windows 11Linux發行版硬件

2018-04-17 10:00:18

Linux發行版面向企業

2010-02-06 14:58:35

2009-03-02 18:13:01

linuxCaos Linux 發行版發布

2013-11-11 11:12:25

Linux發行Slackware

2009-05-26 12:13:05

Linux發行版Puppy Linux

2009-03-20 11:49:02

Scientific

2009-12-21 15:00:24

2009-02-19 16:18:09

Arch Linux發行版

2009-03-30 14:30:44

LinuxPuppy發行版

2019-04-09 15:38:18

Linux發行版Windows

2009-02-20 11:14:33

LinuxArch 2009.02

2009-04-30 17:25:48

發行版MandrivaLinux 2009.

2009-10-13 09:22:01

Linux發行版
點贊
收藏

51CTO技術棧公眾號

亚洲高清资源| 午夜精品美女久久久久av福利| 一区二区欧美日韩| 久久人人爽人人片| 极品美乳网红视频免费在线观看 | 久久精品人人爽人人爽| 久久成人精品一区二区三区| 日本成人中文字幕在线| 欧美一区二区三区激情| 亚洲综合色站| 欧美日韩一区在线| 久久99精品久久久久久水蜜桃| 三级全黄做爰视频| 亚洲日本在线观看视频| 26uuu国产电影一区二区| 久久久噜噜噜久噜久久| 亚洲成人av免费观看| 超碰91在线观看| 不卡视频一二三| 欧美日韩成人在线观看| 日本黄色三级网站| 成人黄色网址| 国产一区二区三区四| 最近2019中文字幕mv免费看 | 日韩激情一二三区| 日韩高清免费在线| 大陆极品少妇内射aaaaa| 国产91绿帽单男绿奴| 欧美精品91| 日韩免费在线观看| 国产香蕉一区二区三区| av一区二区三| 黄色在线成人| 欧美精品一区二区三区视频| 91黄色在线看| 国精品人妻无码一区二区三区喝尿 | 人人妻人人澡人人爽精品欧美一区| 久久影视中文字幕| 第一社区sis001原创亚洲| 色老汉一区二区三区| 欧美日韩综合精品| 亚洲一二区视频| 91精品蜜臀一区二区三区在线| 91麻豆精品国产无毒不卡在线观看| 午夜啪啪福利视频| 免费国产羞羞网站视频| 国内精品伊人久久久久av影院| 色综合视频一区中文字幕| www.美色吧.com| 一二三四视频在线中文| 中日韩av电影| 99在线影院| 国产情侣在线视频| 欧美精品一二| 日韩美女主播在线视频一区二区三区 | 97在线观看免费观看高清| 精品制服美女久久| 欧美高清自拍一区| 婷婷在线精品视频| 久久超级碰碰| 欧美亚洲一区二区在线| 一级黄色片播放| 日本三级在线视频| 不卡电影免费在线播放一区| 国产福利久久精品| 波多野结衣电影在线播放| 新67194成人永久网站| 色黄久久久久久| 成人在线手机视频| 亚洲一区电影| 欧美综合亚洲图片综合区| 国产精品8888| 1区2区在线观看| 97精品电影院| 96sao精品视频在线观看| 免费观看一区二区三区毛片| 久久精品99久久无色码中文字幕| 欧美日免费三级在线| 男人女人黄一级| 日韩欧美精品一区二区综合视频| 欧洲一区二区三区在线| 性生活免费在线观看| 678在线观看视频| 中文字幕一区视频| 欧美18视频| 亚洲av色香蕉一区二区三区| 蜜桃视频第一区免费观看| 久久全国免费视频| 国产99久久久| 尹人成人综合网| 亚州精品天堂中文字幕| 精品国产精品国产精品| 国内精品福利| 欧美亚洲另类激情另类| 麻豆视频在线观看| 四虎8848精品成人免费网站| 另类色图亚洲色图| 亚洲天堂日韩av| 日韩va亚洲va欧美va久久| 成人精品福利视频| 久久精品99北条麻妃| 一本色道久久综合| 欧美激情xxxx性bbbb| 久久精品视频1| 精品一区二区三区在线播放视频 | av高清一区二区| 91亚洲精品乱码久久久久久蜜桃| 日韩精品第一页| 亚洲欧美自偷自拍| 国产传媒日韩欧美成人| 成人免费淫片视频软件| 日本免费一区视频| 国产精品免费av| 色一情一乱一伦一区二区三区| 黄a在线观看| 成人欧美一区二区三区1314 | 日本不卡电影| 国模精品系列视频| 91久久久久久久久久久久| 日韩电影在线免费观看| 成人激情直播| 午夜免费福利在线观看| 懂色av一区二区三区| 国自产拍偷拍精品啪啪一区二区| gogo久久| 欧美一区二区日韩一区二区| 在线观看视频你懂得| 中文字幕伦av一区二区邻居| 亚洲欧美国内爽妇网| 熟女高潮一区二区三区| 国产日产精品_国产精品毛片| 亚洲欧洲一区二区三区久久| 亚洲一区二区三区日韩| 少妇一区二区视频| 亚洲欧美综合图区| 加勒比av在线播放| 韩日精品视频一区| 午夜精品一区二区三区四区| 蜜桃视频动漫在线播放| 一本一道久久a久久精品综合蜜臀| 大肉大捧一进一出好爽视频| 欧美××××黑人××性爽| 欧美日韩一级片网站| 少妇饥渴放荡91麻豆| 国模精品一区| 欧美一级淫片aaaaaaa视频| 亚洲精品国产精品国| 亚洲欧美日韩国产综合在线| 亚洲午夜激情| 精品国产第一福利网站| 欧美日韩在线一区二区| 久久精品国产亚洲av久| 国产欧美高清| 国产日韩在线看片| 亚洲第一页视频| 自拍偷在线精品自拍偷无码专区| 中文字幕在线导航| 久久av偷拍| 日韩av在线免费| 国产无遮挡免费视频| 日本在线播放一区二区三区| 成人免费大片黄在线播放| 在线观看黄色av| 欧美日韩精品三区| 最新版天堂资源在线| 国产成人黄色| 日本精品免费观看| 99久久精品无免国产免费| 91性感美女视频| 免费观看美女裸体网站| 欧美一区二区三区久久| 久久久成人av| 亚洲成人av影片| 国产精品综合网| 日韩理论片在线观看| 日韩一区二区三区免费| 精品电影一区二区三区| 国产在线观看免费av| 91亚洲精华国产精华精华液| 亚洲精品中文字幕无码蜜桃| 97视频一区| 日韩亚洲在线观看| 91美女免费看| 久久久综合激的五月天| 一区在线电影| 亚洲免费福利| 尤物九九久久国产精品的特点| 日本在线观看中文字幕| 国产在线不卡一区| 一卡二卡三卡视频| 亚洲图区在线| 91综合免费在线| 国产99在线| 中文字幕日韩综合av| 青青青国产在线| 中文av一区特黄| 亚洲色偷偷色噜噜狠狠99网| 日韩影院在线观看| 亚洲精品少妇一区二区| 中文成人激情娱乐网| 亚洲最新av网址| 国产剧情久久久| 中文字幕欧美一| 男男做爰猛烈叫床爽爽小说| 狠狠爱成人网| 亚洲精品无人区| 影音成人av| 欧美劲爆第一页| 精品人妻一区二区三区浪潮在线| √…a在线天堂一区| 一级特级黄色片| 国产在线观看免费一区| 国产精品亚洲αv天堂无码| 香蕉久久99| 97视频在线看| 黄在线免费观看| 亚洲天堂男人天堂| 波多野结衣电车痴汉| 亚洲一区二区三区四区在线观看 | 中文字幕免费观看| 久久亚洲免费视频| 国产农村妇女精品久久| 欧美在线免费| 成人资源av| 久久影视精品| 精品国产一区二区三区四区在线观看| 手机在线观看毛片| 欧美日韩一区二区在线播放| 欧美成人777| 国产精品欧美极品| 成人免费网站黄| 99re66热这里只有精品3直播| 交换做爰国语对白| 久久精品免费看| 国产又大又长又粗又黄| 欧美精品尤物在线观看| 久久福利电影| 久久资源综合| 国产精品久久7| 天堂av在线| 欧美黑人性生活视频| 麻豆网站视频在线观看| 欧美成人三级在线| 日韩av在线天堂| 亚洲精品日产精品乱码不卡| 刘亦菲国产毛片bd| 国产高清无密码一区二区三区| 一区二区三区视频在线观看免费| 天天做综合网| 国产在线一区二区三区四区| 欧美www.| 国产精品久久久久久久av电影| v片在线观看| 久久亚洲精品一区| 大地资源网3页在线观看| 精品国产一区二区三区久久狼黑人 | 成人免费视频国产在线观看| 男人揉女人奶房视频60分| 黄色日韩在线| 九色自拍视频在线观看| 人人狠狠综合久久亚洲婷婷| 日韩中文字幕一区二区| 国产精品亚洲片在线播放| 欧美婷婷久久| 成人区精品一区二区婷婷| 亚洲综合欧美日韩| 香蕉视频国产精品| 欧美视频在线第一页| 亚洲精品色图| 麻豆传传媒久久久爱| 美女一区二区视频| 中文字幕在线视频一区二区三区| 国产一区二区三区不卡在线观看| 91亚洲一线产区二线产区| 免费看欧美女人艹b| 日日躁夜夜躁aaaabbbb| 激情六月婷婷综合| 日批视频免费看| 26uuu精品一区二区| 婷婷丁香综合网| 亚洲乱码国产乱码精品精可以看| 国产一级特黄a高潮片| 色播五月激情综合网| 天天综合久久综合| 91精品国产一区二区三区| 黄片毛片在线看| 亚洲图片欧美午夜| www.久久ai| 欧美一级在线播放| 亚洲天堂网站| 狠狠综合久久av| 亚洲精品一区国产| 久久精品二区| 婷婷亚洲五月| 成人免费aaa| 激情国产一区二区| 久久人妻少妇嫩草av无码专区 | 韩国黄色一级片| 久久午夜国产精品| 日韩免费av一区| 国产亚洲一区二区三区四区 | 在线观看免费视频污| 99免费精品视频| 五月天丁香社区| 国产日韩欧美麻豆| 久视频在线观看| 亚洲综合在线五月| 欧美成人黄色网| 亚洲久本草在线中文字幕| 亚洲免费在线观看av| 欧美一区二区三区视频免费播放| 天堂在线中文| 亚洲欧洲在线观看| 在线电影福利片| 国产精品一区二区性色av | 国产欧美日韩中文| 老司机精品在线| 欧美日韩dvd| 老司机精品视频导航| av无码一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 啊v视频在线| 在线看片第一页欧美| 狠狠操一区二区三区| 亚洲www永久成人夜色| 欧美亚洲国产一区| 久久婷婷五月综合色国产香蕉| 国产成a人亚洲| 欧美在线一级片| 亚洲日本va午夜在线影院| 天堂免费在线视频| 亚洲美女又黄又爽在线观看| 不卡av免费观看| 欧美一区在线直播| 99国产精品久久一区二区三区| 中文字幕一区综合| 美腿丝袜亚洲一区| 免费看黄色的视频| 色综合天天综合网国产成人综合天| 欧美特黄一级视频| 久久久久久亚洲精品中文字幕| 精品国产乱码一区二区三区| 日本特级黄色大片| 久88久久88久久久| 午夜激情视频在线播放| 亚洲国产视频a| 日韩精品一区二区亚洲av观看| 亚洲国产精品推荐| 91精品国产综合久久久久久豆腐| 国产91免费看片| 久久99久久人婷婷精品综合| 日韩av在线第一页| 91污在线观看| 天堂网视频在线| 亚洲欧美日本另类| **欧美日韩在线观看| 四虎一区二区| 琪琪一区二区三区| 国产探花视频在线| 7777精品伊人久久久大香线蕉经典版下载| a黄色在线观看| 91精品视频免费| 国产精品欧美三级在线观看| 日韩视频在线免费看| 欧美国产精品专区| 亚洲影视一区二区| 久青草国产97香蕉在线视频| 狂野欧美xxxx韩国少妇| 黄色一级片在线看| 久久久久久久久久电影| 一区二区视频免费观看| 日韩av最新在线观看| 制服丝袜专区在线| 日韩理论片在线观看| 狠狠色丁香久久婷婷综| 青春草免费视频| 日韩黄色在线免费观看| 亚洲第一会所001| 国产精品美女在线播放| 福利一区二区在线| 在线天堂中文字幕| 中日韩美女免费视频网址在线观看| 精品女同一区二区三区在线观看| 欧美三级午夜理伦三级老人| 成人久久18免费网站麻豆| 四虎成人在线观看| 久久精品国产2020观看福利| 超碰在线亚洲| 亚洲中文字幕久久精品无码喷水| 中文字幕亚洲区| 欧美一区二区三区激情| 国产精品三级久久久久久电影| 日韩欧美美女在线观看| 能在线观看的av网站| 亚洲精品成人天堂一二三| 91麻豆成人精品国产| 久久久中精品2020中文| 成人一区二区| 成人免费看片载| 欧美人伦禁忌dvd放荡欲情|