精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品人妻无码一区二区 | 成人涩涩视频| 精品肉辣文txt下载| 2017欧美狠狠色| 国产日本欧美一区二区三区| 欧美黑人一级片| 蜜桃视频欧美| 日韩色在线观看| 欧在线一二三四区| 天堂亚洲精品| 国产夜色精品一区二区av| 91九色综合久久| www五月天com| 欧美色一级片| 伊人成人开心激情综合网| 精品人妻二区中文字幕| 欧美男男gaygay1069| 亚洲成av人**亚洲成av**| 伊人久久青草| 激情小视频在线观看| 国产aⅴ综合色| 国产美女精品视频| 最新中文字幕一区| 午夜久久tv| xxxxxxxxx欧美| 美女被到爽高潮视频| 亚洲网一区二区三区| 91福利区一区二区三区| aa在线观看视频| aaa大片在线观看| 国产精品乱码一区二三区小蝌蚪| 久久精品欧美| 色呦呦视频在线| 国产精品正在播放| 国产在线精品播放| 人人妻人人爽人人澡人人精品| 99精品国产在热久久婷婷| 欧美成人在线免费视频| 日本伦理一区二区三区| 精品久久视频| 亚洲欧美在线看| 插我舔内射18免费视频| 国产精品天天看天天狠| 欧美一区二区三区白人| 五月天激情播播| 国模私拍国内精品国内av| 色婷婷成人网| 26uuu国产日韩综合| 国产精品久久久对白| 国产三级自拍视频| 精品一区二区三区久久| 91久久久国产精品| 国产精品久久久久精| 美女爽到高潮91| 国产精品丝袜久久久久久高清| 成人免费一区二区三区| 日本在线播放一区二区三区| 国产精品久久久久久久久久| 国产精品欧美综合| 日本欧美在线观看| 国产欧美一区二区| 国产精品羞羞答答在线| 狠狠色丁香九九婷婷综合五月| 成人做爰www免费看视频网站| 影音先锋国产在线| 韩国女主播成人在线| 91免费看片在线| 亚洲xxx在线| av中文字幕在线不卡| 久久久综合香蕉尹人综合网| 国产在线三区| 国产精品成人免费| 肉大捧一出免费观看网站在线播放| av免费在线网站| 亚洲福利视频三区| 成熟老妇女视频| 69堂免费精品视频在线播放| 欧美一区二区在线播放| 中国xxxx性xxxx产国| 色88888久久久久久影院| 伊人久久大香线蕉av一区二区| 在线观看天堂av| 欧美黄免费看| 欧美最猛性xxxxx(亚洲精品)| 国产黄色免费视频| 国产福利一区在线| 蜜桃臀一区二区三区| 99免在线观看免费视频高清| 亚洲色大成网站www久久九九| 男女激情免费视频| 蜜桃视频成人m3u8| 欧美videos中文字幕| 波多野结衣办公室33分钟| 999视频精品| 美女精品一区二区| 久久久久北条麻妃免费看| 久久久久97国产| 美女尤物久久精品| 97人人模人人爽人人少妇| 日韩有码第一页| 国产精品久久久久久户外露出 | 国产传媒一区二区| 视频二区在线| 尤物视频一区二区| mm1313亚洲国产精品无码试看| 韩国一区二区三区视频| 亚洲欧洲日韩国产| 午夜写真片福利电影网| 日韩国产精品久久| 成人h在线播放| 欧美三级理伦电影| 欧美日韩国产中文字幕| 久久久福利影院| 国产一区二区三区日韩精品 | 国产一区二区在线电影| 久久精品国产美女| 黄页网站在线| 欧美精品123区| www.av天天| 国产精品久久久久久模特| 亚洲最大的网站| 日本暖暖在线视频| 日本丶国产丶欧美色综合| 中文字幕天堂av| 午夜精品久久| 成人免费观看a| 91最新在线| 91国偷自产一区二区三区成为亚洲经典| 美女搡bbb又爽又猛又黄www| 亚洲人成免费网站| 国产视频福利一区| 第一视频专区在线| 在线观看精品一区| 国产精品815.cc红桃| 一本久道久久久| 国产高清精品一区二区三区| 中文字幕伦理免费在线视频| 51午夜精品国产| 亚洲欧美日韩第一页| 日本欧美一区二区三区乱码| 美国av一区二区三区| www色aa色aawww| 成人在线视频播放| 亚洲欧美日韩国产成人| 欧美一级视频免费观看| jvid福利写真一区二区三区| 国产夫妻自拍一区| 丁香综合av| 久久久久久97| 天堂av在线免费| 岛国av一区二区三区| 国产偷人妻精品一区| 乱人伦精品视频在线观看| 免费国产一区二区| 日韩三区免费| 最新中文字幕亚洲| 国产熟女一区二区丰满| 亚洲综合另类小说| 成熟妇人a片免费看网站| 亚洲精品影院在线观看| 精品人伦一区二区三区| 漫画在线观看av| 精品无码久久久久久国产| 97人人澡人人爽人人模亚洲| 91丝袜高跟美女视频| 亚洲成熟丰满熟妇高潮xxxxx| 免费视频一区三区| 国产精品久久久久久久久久久新郎| 麻豆av电影在线观看| 91成人网在线| eeuss中文字幕| 黄网站免费久久| 六月婷婷激情网| 国产乱人伦丫前精品视频| 51ⅴ精品国产91久久久久久| 国产午夜在线视频| 欧美日韩视频第一区| 三级黄色录像视频| 成人一区二区三区视频| 九九九九免费视频| 欧美日韩在线观看视频小说| 91免费福利视频| 国精产品一区一区三区mba下载| 亚洲精品999| 波多野结衣不卡| 亚洲欧美偷拍三级| 国产精品手机在线观看| 久久久久国内| 日韩不卡视频一区二区| 天堂一区二区三区四区| 国产成人一区二| 二区三区在线观看| 日韩成人中文字幕| 亚洲中文字幕在线一区| 亚洲国产日韩a在线播放| 谁有免费的黄色网址| 国产精品高潮呻吟久久久| 精品一区二区三区影院在线午夜| 91麻豆天美传媒在线| 久久精品色播| 国产精品视频大全| 国产精品186在线观看在线播放| 亚洲欧美中文字幕在线一区| 99热这里是精品| 欧美在线免费观看视频| 亚洲最大的黄色网址| 93久久精品日日躁夜夜躁欧美 | 99视频在线看| 中文字幕色av一区二区三区| 亚洲AV无码国产精品| 国产久卡久卡久卡久卡视频精品| 男人天堂成人在线| 亚洲黄网站黄| 国产情侣第一页| 无码一区二区三区视频| 日本免费高清一区| 香蕉精品久久| 国产麻豆乱码精品一区二区三区| 日韩欧美三区| 国产精品久久久久久搜索| 国内精彩免费自拍视频在线观看网址 | 99久久精品费精品国产| 久久婷婷开心| 亚洲精品国产九九九| 成人国产精品av| www.26天天久久天堂| 69视频在线播放| 国产三线在线| 九九久久精品一区| 欧美激情二区| 中文字幕在线观看亚洲| 国产毛片在线看| 精品在线欧美视频| 男人天堂av网| 欧美精品一区在线观看| 午夜精品久久久久久久99| 欧美日本韩国一区二区三区视频| 色老头在线视频| 一本色道久久综合精品竹菊| 国产情侣在线视频| 性久久久久久久| 国产亚洲精品久久久久久无几年桃 | 精品久久久久久久人人人人传媒 | 欧美日韩亚洲综合一区| 成人毛片18女人毛片| 亚洲成人在线网站| 91麻豆精品成人一区二区| 国产日韩v精品一区二区| 亚洲国产欧美视频| 99久久er热在这里只有精品15| 久久久国产精品久久久| 国产高清一区日本| 永久免费看片在线观看| 国产一区二三区| 中文字幕色网站| 国产精品一区二区免费不卡| 日本xxxx免费| 99综合电影在线视频| 色天使在线视频| 久久久久久久久99精品| 卡一卡二卡三在线观看| 中文字幕在线观看一区| 久久久久久视频| 亚洲一区二三区| 美日韩一二三区| 欧美性三三影院| 国产视频在线观看免费| 日韩视频免费观看高清完整版 | 99久久国产宗和精品1上映| 欧美a级理论片| 午夜影院免费版| av色综合久久天堂av综合| 偷拍夫妻性生活| 国产精品国产三级国产三级人妇 | 午夜精品久久久久99热蜜桃导演 | 亚洲AV无码成人精品区东京热| 精品亚洲自拍| 精品国偷自产在线| 国产福利在线播放麻豆| 久久久久成人精品| 日韩精品影院| av资源一区二区| 久久99精品久久久久久园产越南| 一区二区精品免费视频| 国产一区日韩一区| 久久久久免费精品| 国产精品中文有码| 91精品人妻一区二区三区| 中文字幕亚洲在| 日本视频免费在线| 欧美喷潮久久久xxxxx| 国产18精品乱码免费看| 一区二区三区视频免费在线观看| 1024在线播放| 国产成人一区二区三区小说| 久久久久久久久久久久电影| 麻豆av一区二区三区| 牛牛国产精品| 手机看片福利日韩| 成人午夜视频在线| 中文字幕第24页| 精品久久久国产| 国产精品老熟女视频一区二区| 精品丝袜一区二区三区| av网站免费在线观看| 国产精品99久久久久久白浆小说| 亚洲一二av| 在线观看欧美一区| 久久久久一区| 亚洲图片欧美另类| 成人免费一区二区三区视频| 在线免费观看av网址| 欧美大肚乱孕交hd孕妇| 激情综合在线观看| 国产麻豆精品视频| 五月婷婷欧美激情| 欧美日韩精品在线| www.污视频| 久久久999精品视频| 成人免费网站www网站高清| 成人91免费视频| 一区二区蜜桃| 日韩欧美亚洲另类| 国产精品久久久久影院| 久久国产乱子伦精品| 亚洲欧美激情一区| 女厕盗摄一区二区三区| 国产精品国产精品国产专区蜜臀ah | 久草免费福利在线| 国内久久婷婷综合| 成人18视频免费69| 欧美三级在线播放| 香蕉国产在线视频| 69视频在线免费观看| 久久精品免视看国产成人| 91视频99| 国产精品大片| 亚洲无人区码一码二码三码| 亚洲精品第1页| 国产福利小视频| 九九久久精品一区| 2020最新国产精品| 亚洲色婷婷久久精品av蜜桃| 国产精品一区二区男女羞羞无遮挡| 色哟哟一一国产精品| 欧美一级高清片| 性欧美ⅴideo另类hd| av资源站久久亚洲| 亚洲麻豆一区| 亚洲国产欧美视频| 欧美在线观看视频一区二区三区 | 欧美丰满少妇xxxxx| 日韩精品中文字幕吗一区二区| 免费看日b视频| 成人美女视频在线观看18| 国产无套粉嫩白浆内谢| 精品调教chinesegay| 中文字幕电影av| 一区二区在线看| 国精产品一品二品国精品69xx| 久久久久久伊人| 天堂99x99es久久精品免费| 国产a级片免费观看| 中文字幕在线一区二区三区| av在线资源观看| 性色av一区二区三区免费| 一区二区小说| 欧美第一页浮力影院| 亚洲精品国产视频| 污污视频在线免费看| 日本免费在线精品| 99久久精品费精品国产| 黄色av电影网站| 一本大道久久精品懂色aⅴ| 婷婷在线视频观看| www.av一区视频| 久久激情网站| 91人妻一区二区三区蜜臀| 亚洲国产欧美一区二区丝袜黑人| 韩国成人漫画| 五月天综合婷婷| av中文一区二区三区| 伊人网视频在线| 久久久亚洲国产| 欧美一区2区| 图片区偷拍区小说区| 91国产免费看| 涩涩涩999| 日韩中文欧美在线| 99精品久久久久| 亚洲无av在线中文字幕| 国产日本亚洲| 人妻精品无码一区二区三区| 亚洲欧美自拍偷拍色图| 午夜国产在线观看| 成人乱色短篇合集| 丝袜美腿高跟呻吟高潮一区| 久久丫精品久久丫| 色综合伊人色综合网站| 粉嫩久久久久久久极品|