久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

將Linux代碼移植到Windows的簡單方法

瀏覽:7日期:2024-01-26 13:28:37

一.前言

Linux擁有豐富各種源代碼資源,但是大部分代碼在Windows平臺情況是無法正常編譯的。Windows平臺根本無法直接利用這些源代碼資源。如果想要使用完整的代碼,就要做移植工作。因為C/C++ Library的不同和其他的一些原因,移植C/C++代碼是一項困難的工作。本文將以一個實際的例子(Tar)來說明如何把Linux代碼移植到Windows平臺上。移植過程將盡量少修改代碼,以便代碼的運行邏輯不會發生任何變動。保留絕大部分軟件主要功能。

二.準備工作

Tar是Linux平臺下面一個打包工具。移植這樣一個程序到windows平臺需要做那些工作呢?

首先是一些準備工作,在Windows平臺上面安裝上Cygwin的最新版本,在Cygwin中安裝好GCC等開發工具。 同樣也需要一個Windows開發環境??梢允褂米钚掳姹綱isual Studio, Microsoft Visual Studio .NET 2003。從www.gnu.org上取得Tar的最新源代碼,版本是1.13。在Cygwin下面解開tar-1.13.tar.gz.源代碼包。注意請不要在Windows下面使用WINRAR或者WINZIP來解壓縮。 WINRAR和WINZIP在解壓縮某些tar.gz包的時候會有問題。使得解包之后的目錄和文件出現異常。如果是源代碼包將有可能不能在Cygwin下面正確編譯。解開壓縮包之后,進入 tar-1.13目錄,在當前的目錄下面輸入

./configure

命令,運行完畢之后,再次輸入

make

命令。開始編譯tar的Cygwin版本。

編譯基本上不會有問題,進入src目錄,可以看到新編譯好的Tar程序tar.exe。

Cygwin是一個API層的Linux模擬環境。如果能夠在Cygwin下面編譯,運行。實際上也就是能在Windows下面編譯和運行,只是需要有一層中間API模擬某些Linux特有的操作。簡單的判斷一個Linux程序能不能移植到Windows平臺下面,就是看是否能在Cygwin下面編譯源代碼,并運行程序。

在Cygwin中編譯Tar的源代碼,判斷能否移植只是其中一個原因。另外一個原因是移植代碼過程中需要一個特殊的頭文件config.h。config.h是移植過程中最重要的源代碼文件。Config.h文件并不是源代碼本身的一部分。文件是在Cygwin下面運行”./configure”命令時生成的。在Cygwin下運行”./Configure”命令時,會根據Cygwin平臺開發環境生成config.h文件。編譯時也需要config.h文件對代碼編譯項進行控制。移植工作也以config.h文件為基礎。

接下來就是構造Windows工程。先用Visual Studio .NET 2003創建一個空的工程(Project),命名為WinTar。根據Cygwin中的編譯輸出信息,Tar主要的代碼在Src和lib兩個目錄中。把這兩個目錄復制到新工程里,并把代碼加入到工程中。然后復制Config.h到WinTar工程目錄下面。

準備工作基本上完成了,接著就是移植。移植過程可以分為3個部分。

三.第一個目標:使得WinTar能編譯過(Compiler)

第一個目標的完成主要圍繞Config.h來實現。Linux下開發環境和Windows開發環境很大的不同是C Library頭文件和各種類型的定義不同。而Config.h提供了完整編譯開關來處理因為不同平臺間開發環境不同帶來的不同之處?,F在需要手工去修改這個文件,以便Tar源代碼能適應Windows平臺。

首先調整各種C Library頭文件(Header File)的包含問題。在Config.h中定義了很多類似HAVE_XXXX_H。比如定義HAVE_CONFIG_H為1表示工程中可以使用config.h。

#define HAVE_MALLOC_H 1表示可以在工程中使用Malloc.h頭文件。通過調整這些定義值,可以去除一些Windows平臺下面沒有的頭文件包含。也許其他地方還有很多頭文件包含關系需要處理,但是這里的定義基本上解決了大部分的頭文件包含問題。

/* Define if you have the <linux/fd.h> header file. *//* #undef HAVE_LINUX_FD_H */

/* Define if you have the <locale.h> header file. */#define HAVE_LOCALE_H 1

/* Define if you have the <malloc.h> header file. */#define HAVE_MALLOC_H 1

/* Define if you have the <memory.h> header file. */#define HAVE_MEMORY_H 1

/* Define if you have the <ndir.h> header file. *//* #undef HAVE_NDIR_H */

第二步,調整各種數據類型的定義,可能在linux下面會有很多特殊的數據類型定義,Config.h文件中也包含了一部分可以變動的數據類型定義項。這些定義一般都是基本數據類型的重定義。可以根據Windows平臺下的數據類型定義情況進行修補。比如在Cygwin的開發環境中有個數據類型mode_t, Visual Studio的C Library中卻(作者 很土,聯系方法 jackforce at 163 dot com)找不到這樣數據類型。Tar代碼中使用了大量的mode_t數據類型. config.h中提供了修改項來讓開發人員自己修改mode_t的定義,并提示如果mode_t在<sys/types.h>中沒有定義的話,可以把他定義為int型。所以在config.h加上#define mode_t int。這樣mode_t沒有定義的問題就解決了。其他的數據類型也是同樣對待處理。

* Define to `int' if <sys/types.h> doesn't define. */#define mode_t int

/* Define to `long' if <sys/types.h> doesn't define. *//* #undef off_t */

/* Define to `int' if <sys/types.h> doesn't define. */#define pid_t int

第三步,調整各種函數定義。在Config.h中除了HAVE_XXXXX_H之外還有一種預定義,HAVE_XXXX。 這是一些可選用函數定義開關。#define HAVE_MEMSET 1 表示工程中可以使用memset函數。也就是說工程用到的類庫中已經實現了這個函數。如果沒有,那么就需要#undef HAVE_MEMSET,當然也可以自己提供這些函數。

/* Define if you have the memset function. */#define HAVE_MEMSET 1

/* Define if you have the mkdir function. */#define HAVE_MKDIR 1

/* Define if you have the mkfifo function. */#define HAVE_MKFIFO 1

/* Define if you have the munmap function. */#define HAVE_MUNMAP 1

最后,Config.h文件中除了上面的頭文件,函數,數據類型編譯選項之外,還有其他一些東西,比如環境變量,其他編譯選項。這些內容會根據不同的項目而有很大的不同。但是可以從Config.h基本看出移植的工作量有多大。

經過上面的調整之后,勢必(作者很土,其他文章 請查看vchelp很土專欄)因為Windows環境下沒有某些頭文件,比如poll.h,就會沒有poll函數,沒有dirent.h 就會沒有dirent 結構體。而繼續使得WinTar編譯不過。這個時候就需要根據具體的編譯錯誤信息進行細節修飾。當需要使用Windows下一些特殊的定義的時候請不要忘了在Config.h的最前面加入#include <Windows.h>. 關于細節修飾,舉個例子來說明。比如有個選項HAVE_INTTYPES_H

/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,and declares uintmax_t. */#define HAVE_INTTYPES_H 1

通過分析代碼可以發現,代碼并不是需要一個完整的inttypes.h文件,而是為了一個uintmax_t的定義。在Visual Stdio的C Library中并沒有inttypes.h這個文件,也沒有uintmax_t這個定義?;厮軨ygwin的include目錄的inttypes.h文件,發現了uintmax_t的定義

typedef unsigned long long uintmax_t;

很簡單的數據類型重定義。這么簡單定義,完全可以從Cygwin的Include目錄中單獨拿出來做一個專用版本的inttypes.h加入到WinTar項目中。這樣編譯過程中uintmax_t沒有定義的問題就解決了。解決這類問題的一般的做法也就是從Cygwin的Include目錄里面拿出相關的頭文件進行修改或者單獨復制到WinTar的目錄下面。[本文于2003年完成. 如需要轉載 請聯系jackforce at 163 dot com ]修改或者復制代碼的原則是不再引入更多的定義或者頭文件,僅取所需部分。其他類似的問題還有direct結構定義和相關函數。

在編譯過程中,很多錯誤是有由lib目錄下的文件產生的,但是lib目錄下的文件不是完全都需要的。lib目錄只是一個對Tar的補充庫。需要的代碼才需要編譯。 具體判斷的方法一個是參考Windows C Library庫的內容。如果同樣的函數,數據類型已經定義,就不需要Lib目錄中的相同數據類型的定義和函數實現了。還有一個方法是盡量去掉lib目錄中的C文件,只保留頭文件,并使得編譯能夠通過,根據link的錯誤信息去檢查那些lib中的C文件是需要的。

除了修改外圍的各種頭文件之外,還不要忘了修改工程的編譯選項,特別是預定義選項。在Tar的移植過程就需要以下的預定義HAVE_CONFIG_H,_POSIX_SOURCE,MSDOS。HAVE_CONFIG_H 表示程序編譯需要config.h文件。為了方便期間,在tar移植過程中就放到工程的預編譯選項中了。MSDOS,移植的是Linux下的控制臺程序,而Windows平臺最接近Linux控制臺就是DOS,特別是一些環境變量設置和全局常量的定義。Tar的有些代碼針對MSDOS環境已經做了一部分修正,這點在移植過程中可以利用起來。還有一個可選項是__CYGWIN__。有些Linux程序會針對Cygwin平臺做出代碼上的特殊設定。當遇到這樣的代碼的時候,一定要加上__CYGWIN__預定義項,能夠大大減少移植需要的工作量。還有就是移植過程引入的各種Cygwin代碼中也可能需要__CYGWIN__定義(有時候是其他的定義,比如_POSIX_SOURCE,或者__INSIDE_CYGWIN__)。

經過上述的幾個步驟。第一個目標,代碼能夠編譯通過基本上是不會有什么問題的。只要把握好二個修改代碼的基本原則,第一。引入新的代碼,而不修改原有的代碼。在沒有辦法進行調試前修改源代碼是不允許的,修改的不好就會引起最后代碼運行邏輯的混亂,而且在代碼能夠運行之前是很難發現問題的。所以除非非常有把握,否則不要修改被移植工程的源代碼。第二,引入新的代碼之后,不能因為這次引入而需要再次引入新的代碼。這樣子,就進入死循環了。為了解決某個數據類型的定義,而引入了新的不能解釋的數據類型。這樣還不如不引入新的代碼。所以引入新的代碼,特別是很多頭文件。引入之前一定要做修改,只保留工程本身需要的部分,去除那些不需要的代碼。直到能編譯通過為止。 三:第二個目標,使得代碼能夠鏈接過(Link)

完成了第一個目標之后,就會有大量的link錯誤。原因是前面引入了很多外部函數,外部全局常量只有定義而沒有實體,于是就會產生link錯誤?,F在需要的是為代碼提供引入的函數實體,外部全局變量實體。一般都是函數link(本文于2003年完成. 如需要轉載 請聯系jackforce at 163.com)不到的比較多。

要解決link錯誤就需要了解不同平臺上面函數操作的區別,特別是某些概念的區別。這里最好的參考資料有兩個。一個是Windows Services for UNIX (SFU)的幫助文件,一個是MSDN中的一篇文章《UNIX Application Migration Guide》。SFU是微軟提供一個Unix兼容環境,有點像Cygwin。在安裝上SFU之后有一個幫助文件。其中有一部分就是Unix,Linux函數的說明,有些函數提供了信息說明可以用Windows Library中那些函數來替代。這點對于移植是很重要的(省事)。UNIX Application Migration Guide應該不算文章而是有點像書了。它說明了很多windows和Unix系統(類Unix系統)中很多概念不同之處,針對這些不同的概念提供了很多相關的信息來說明如何進行模擬這些不同之處。比如Unix系統中Signals概念可以使用Windows環境中的Event來替代。SIGALRM用Windows Message來替代等。

SFU的幫助文件提供了一部分信息來說明Windows平臺中哪些低階函數(C 函數庫)可以替代相關Unix函數?!禪NIX Application Migration Guide》則提供了一種方法來轉換Unix平臺上的一些OS級的概念到windows上。實際上Cygwin下面也做了很多這樣的轉換。具體解決link問題的時候可以參考Cygwin本身的實現。

不過有些概念,比如安全權限方面的概念。在Linux平臺和windows平臺上面是完全不能互換的。而且windows平臺中的權限函數操作(本文于2003年完成. 如需要轉載 請聯系jackforce@163.com)的過于復雜。這樣對于某些linux函數。比如getuid處理可以參考Cygwin的處理辦法。什么也不做直接返回0 (return 0)。當代碼中遇到這些函數的時候可以從Cygwin的代碼中復制一個getuid出來。放入工程中去。利用這些資料,并通過相關的工具比如sourceinsight來搜索Cygwin本身的源代碼,Link問題并不難處理。只是有可能在處理link問題的過程中會回復到上面的問題,編譯不過。這個時候的代碼修改還是一定要注意不要引入太多的新的代碼,免得問題越來越復雜。

四:代碼運行正常

實際上當link問題解決之后,程序可以在windows環境中運行時,一切就盡在掌握了。如果不考慮做多平臺的程序的話,這個時候就可以任意去修改程序了。不過在代碼調試過程可能需要一個參照,看看正常的程序運行流程是怎么樣的。剛剛移植過來的程序在很多地方并不能馬上就能正常的運行?;氐紺ygwin中,重新編譯一個可以調試的版本(在GCC編譯選項加上-g3),在需要的時候可以在Cygwin中調試程序。調試可以用GDB或者Insight。如果習慣Windows 平臺下面編程,可以使用Insight,這是一個TCL/TK腳本程序,它提供了一個Windows界面以方便用戶調試程序,不過Insight最終還是調用GDB。在這里具體調試就不細說明了。

五:多平臺代碼

移植后的代碼(本文于2003年完成. 如需要轉載 請聯系jackforce@163.com)如果需要在多個平臺上面運行,就要在lib目錄里面大做文章了。提供自己的函數庫,并根據各個平臺進行調整。Tar的代碼由Config.h和一些編譯選項來控制如何在各個不同的平臺上面做編譯。Lib則提供了很多C Library函數或者不同平臺下面的其他函數的替代版本。這樣Tar在編譯過程中就不會因為某些平臺下某些函數的缺失而編譯不過。多平臺支持,一般都是在代碼中加上很多編譯開關,在編譯期間去分隔Linux,Windows或者其他平臺下面的特殊代碼。比如utime.h頭文件的包含問題。因為文件在Linux(gcc)下面和Windows(cl)下所處的C Library目錄不同。包含的處理辦法就不一樣??赡苄枰@樣寫才能完全正確的包含。

#if HAVE_UTIME_H &#61663;---- 如果有utime.h 文件# ifdef WIN32 &#61663;-----如果是win32環境 # include <sys/utime.h> &#61663;-----包含sys/utime.h# endif# ifdef LINUX &#61663;---- 如果是Linux環境# include <utime.h> &#61663;---- 包含utime.h # endif#else &#61663;--- 如果沒有utime.h定義出需要的結構 struct utimbuf{long actime;long modtime;};#endif

在其他的代碼中基本上也是這樣的處理。根據編譯環境的不同來編譯不同的代碼。 這樣的define的區隔,主要就是為了區隔不同平臺的不同細微區別。有的區別也許是某些常量沒有定義,有些區別是某些函數不存在。如果代碼中調用函數在某些平臺下面不存在,就需要提供一個lib去提供這些函數。Tar的Lib的作用也是如此。

基本上代碼的移植是前難后易。前期首先要保證源代碼本身的邏輯不能變動,所以在修改代碼方面只能盡量修改外圍的代碼,而不是修改源代碼本身。如果link過了之后,則就是一般的Windows下面的編程了,可以根據需求任意修改移植后的代碼了。最難的地方可能就是OS級不同概念的替換了。C Library雖然在各個平臺上有不同之處,但是總是比較接近,不同的地方可以提供自己編寫的代碼來替換。但是OS級的概念,和平臺相關性太大,一般不太容易替換。

六:擴展問題,待解決的問題

如果需要把移植過來的代碼改成DLL或者lib給其他的工程調用。比如給其他的工程提供一個解包Tar文件的功能。如果不加修改,那么移植過來的代碼有很多缺陷。

首先是多線程支持問題。如果代碼中有很多全局變量,那么改成DLL或者lib之后就不能在多線程下面調用。

其次,DLL接口表。移植后的代碼入口是main函數,雖然整個工程里面有很多獨立功能,但是這些獨立功能的調用都是通過使用不同的參數來實現。如何輸出接口表給其他工程使用,需要做些功夫。

三、控制 原始的控制臺程序在下了運行參數之后,一般都是一頭運行到底的,也有可能在中間有些要求輸入某些信息的。這樣的程序如何集成到其他的工程中并受到其他工程的控制?比如遇到某些錯誤要返回等等。在Tar代碼中遇到錯誤就直接退出程序。顯然這些地方就不合DLL設計要求??赡苄枰匦略O計代碼的結構。

四,輸出信息。Tar工程里面很多向控制臺輸出的信息。這些信息輸出需要重新定向或者屏蔽。

第三第四部分可以參考Linux下面的FrontEnd程序,即只是為某個特殊的程序提供的一個GUI界面的程序。FrontEnd程序就是控制了主程序的運行并重新定向輸出信息到GUI界面上。

注1. Cygwin,是Windows平臺下面的一個Linux模擬環境??梢詮膚ww.Cygwin.com上下載全部內容。

注2. Windows Services for UNIX (SFU)的SDK可以從微軟網站上獲得 http://www.microsoft.com/windows/sfu/

注3. UNIX Application Migration Guide 可以從MSDN中取得,如果沒有MSDN可以從微軟MSDN網站上取得。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnucmg/html/ucmglp.asp

注4. Tar, Cygwin下面有Tar。但是只能在Cygwin下面運行 或者必須提供Cygwin的平臺DLL才能在windows下面單獨使用Tar程序。注5. CL是微軟的C/C++編譯器,包含在Visual Studio各個版本中

本文于2003年完成. 如需要轉載 請聯系jackforce@163.com,如果有看到部分干擾信息.請原諒.主要避免轉載過程中作者信息丟失用.不得以為之,請各位原諒.

PS :

用一個例子簡單說明了從linux平臺移植到windows平臺上的一些需要注意的問題和解決方法.

例子僅用來說明移植過程產生的問題用.

標簽: Windows系統
主站蜘蛛池模板: 一区二区三区国产在线观看 | 国产一级片在线播放 | 免费国产黄色大片 | 羞羞视频网站免费看 | 亚洲精品一区在线观看 | 成人欧美一区二区三区视频xxx | 成人精品视频 | 欧美在线影院 | 欧美久久久久久 | 欧美午夜精品一区二区三区电影 | 日韩a级免费视频 | 亚洲精品视频在线播放 | 欧美亚洲高清 | 亚洲高清视频在线观看 | 伊人网视频 | 成人欧美一区二区三区视频xxx | 国产精品一区二区三 | 天天操天天色天天 | h视频在线免费 | 国产精品影院在线观看 | 草久在线观看 | 中文字幕在线视频免费观看 | 久久久91精品国产一区二区三区 | 免费看的毛片 | 91九色porny首页最多播放 | 久久免费精品视频 | 国产精品69毛片高清亚洲 | 欧美成人资源 | 国产精品免费av | 国产成人精品一区二区 | 亚洲大片免费观看 | 精品久久久久久久久久久久久久 | 91亚洲视频在线观看 | 中文字幕一区二区三区四区不卡 | 久久香蕉国产视频 | 久热99| 国产精品久久久久久一区二区三区 | 国产精品人人做人人爽 | 欧美在线网站 | 一级a性色生活片久久毛片明星 | 欧美日韩中文字幕在线播放 | 九九热最新视频 | 成人av在线网 | 99精品全国免费观看视频软件 | 日本在线小视频 | 午夜精品久久久久久99热软件 | 91视频原创 | 一区二区色 | 久久久久无码国产精品一区 | 午夜视频精品 | 91在线视频免费观看 | 欧美爱爱视频 | 国产欧美日韩在线 | 国产艳妇av视国产精选av一区 | 日韩一区免费在线观看 | 亚洲综合色自拍一区 | 国内精品一区二区三区 | 国产h片在线观看 | 久久久久一区二区 | 久久精品中文字幕 | 国产99久久精品一区二区永久免费 | a级在线| 日韩视频欧美视频 | 精品国产欧美一区二区 | 亚洲天堂久久 | 婷婷久久五月天 | 国产一级免费在线 | 成人片免费看 | 午夜精品网站 | av免费资源| 中文字幕av在线 | 一级大片av | 国产亚洲精品成人av久久ww | 日本a视频 | 国产精品永久在线观看 | 日韩欧美在线中文字幕 | 日韩视频中文字幕 | 成人免费视频在线观看 | www日本在线| 久久国产精品视频 | 噜噜噜噜狠狠狠7777视频 | 精品伦理一区二区三区 | 艹艹网| 国产精品永久免费自在线观看 | 婷婷色综合 | 欧美日韩在线观看一区二区三区 | 综合伊人 | 日韩精品一二区 | 草草影院ccyycom | 亚洲日韩中文字幕一区 | 深夜福利1000 | 久久在线视频 | 91精品国产综合久久久久久漫画 | 无套内谢孕妇毛片免费看红桃影视 | 日韩成人免费 | 亚洲成人免费在线观看 | 福利片在线观看 | jvid美女成人福利视频 | 亚洲视频在线免费观看 | 伊人欧美在线 | 激情综合久久 | 欧美视频精品 | 综合99 | 精品国产不卡一区二区三区 | 欧美综合激情 | 国产高清久久久 | 欧美一区二区三区四区视频 | 欧美一级淫片007 | 日本理论片好看理论片 | 日韩国产一区二区三区 | 亚洲成人av | 国产日韩欧美一区 | 狠狠色狠狠色合久久伊人 | 在线中文字幕av | 国产a视频 | 久久国产精品一区 | 成人精品久久久 | 毛片av在线 | 日韩激情视频一区二区 | 久久综合亚洲 | 永久免费精品视频 | 亚洲一区二区三区视频 | 国产精品美女久久久久久免费 | 午夜av电影 | 亚洲精品国产乱码在线看蜜月 | 国产xxxx成人精品免费视频频 | 伊人操操| 91夜夜 | 久久91视频 | 一区二区三区高清不卡 | 玖玖精品视频 | 在线观看免费视频a | 一级欧美一级日韩 | 久久国产婷婷国产香蕉 | 日日摸夜夜添夜夜添亚洲女人 | 久久国产欧美日韩精品 | 伊人国产精品 | 一区二区三区不卡视频 | 日韩欧美一区二区三区 | 国产成人免费网站 | 最新国产精品 | 国产日产精品一区二区三区四区 | 在线成人亚洲 | 亚洲国产高清在线 | 国产一区二区影院 | 色综合视频 | 毛片网站在线观看 | 欧美成人精品一区二区男人看 | 亚洲国产精品一区二区久久,亚洲午夜 | 免费一区二区 | 99精品视频一区二区三区 | 国产成人精品一区二区三区视频 | 国产精品美女久久久久aⅴ国产馆 | 一级毛片av | 亚洲人成人一区二区在线观看 | 日本久久视频 | 大香萑| 精品国产99 | 欧美视频在线播放 | 99精品一区二区三区 | 成年人网站在线免费看 | 久草青青 | 日韩精品久久久 | 最新黄色网址在线播放 | 国产一区二区三区久久久 | 久草久草久草 | 26uuu成人免费毛片 | 午夜激情在线免费观看 | 午夜网| 91在线看视频 | 激情视频网站 | 久久精品在线 | 91精品国产综合久久婷婷香蕉 | 欧美一区二区三区免费 | 国产一区二区三区在线 | 欧美精品久久久久久久久久丰满 | 草草网| 国产精品456在线影视 | 在线免费色视频 | 亚洲精品免费视频 | 91在线视频在线 | av资源首页 | 亚洲精品午夜国产va久久成人 | www.com国产精品| 亚洲精品网址 | 亚洲欧美综合精品久久成人 | 一区二区欧美在线 | 欧美精品1| 国产精品美女久久久久久久久久久 | 成人婷婷 | 久久精品国产一区 | 黄免费视频 | 国产免费av网站 | 日韩和的一区二在线 | 国产精品久久久久国产a级 国产精品欧美一区二区三区不卡 | 久久亚洲视频 | www国产xxx| www.成人久久 | 国产黄色播放 | 日本成人在线视频网站 | 欧美亚洲免费 | 99久久久99久久国产片鸭王 | 国产成人免费视频 | 国产精品一区人伦免视频播放 | 免费看毛片的网站 | 精品久久久久久久人人人人传媒 | 在线观看中文 | 国产日韩欧美91 | 国产一区二区在线免费观看 | 91视频免费观看 | 亚洲精品一 | 成人在线播放网站 | 一区二区色 | 亚洲www视频 | 天堂中文av | 国产猛男猛女超爽免费视频网站 | 成人欧美一区二区三区视频xxx | 在线精品亚洲欧美日韩国产 | 成人aaa| 女人爽到高潮aaaa电影 | 国产亚洲精品久久久优势 | 91精品国产91久久久久久吃药 | 在线91 | 久草免费在线 | 免费在线色 | 密色视频 | 国产九九在线观看 | 日韩一区欧美一区 | av中文在线 | 久久久精品久久久久久 | 比利时xxxx性hd极品 | 国产中文在线 | 国产专区一区二区三区 | 亚洲国产精品一区 | 亚洲蜜臀av乱码久久精品蜜桃 | 国产精品96久久久久久久 | 看毛片网站 | 人人草天天草 | 亚洲久久视频 | 国产精品永久久久久久久久久 | 久久网国产 | 国产精品毛片无码 | 亚洲免费影院 | 亚洲 欧美 在线 一区 | 国产欧美在线一区二区 | 国产一区二区三区视频 | 日本中文字幕一区 | 久久国产成人 | 亚洲一区二区在线视频 | 人人澡人人射 | 成人免费视频网站在线观看 | 欧美二三区| 亚洲精品www | 国产精品二区三区 | 国产精品久久久久久久久久久久 | 日日摸日日碰夜夜爽不卡dvd | 中文字幕在线网址 | 日韩电影免费在线观看中文字幕 | 午夜精品| 亚洲精品国产综合区久久久久久久 | 天天干,夜夜操 | 亚洲福利社区 | 久久午夜视频 | 精品中文字幕一区二区 | 国产高清精品一区二区三区 | 午夜剧 | 综合一区二区三区 | 亚洲国产日韩在线 | 人人爽视频 | 成年无码av片在线 | 91久久国产综合久久91精品网站 | www日本高清 | 五月激情婷婷六月 | 日韩在线高清视频 | 干狠狠| 欧美一级免费在线观看 | 在线成人免费观看www | 日本不卡免费新一二三区 | 中文字幕精品一区久久久久 | 99亚洲精品 | 欧美精品二区中文乱码字幕高清 | 国产毛片毛片 | 日韩在线中出 | 91精品久久久久久久久久久 | 精品成人一区 | 成人乱人乱一区二区三区 | 日韩欧美精品一区 | 欧美日韩一区在线 | 性做久久久久久 | 免费亚洲视频 | 视频一区二区三区中文字幕 | 中文字幕视频在线免费观看 | 亚洲一区在线视频 | 欧美综合一区二区三区 | 一区二区三区影院 | 91丁香| 亚洲男人的天堂在线观看 | 欧美日本韩国在线 | 精品日韩在线 | 操她视频网站 | 亚洲一区二区在线电影 | 精品在线一区二区 | 精品九九| 97久久精品人人做人人爽50路 | 黄色一级毛片 | av一区二区三区四区 | av手机在线电影 | 欧美一级片在线 | 91色站| 日韩一级大片 | 色婷婷亚洲 | 精品久久久久久一区二区 | yy6080久久伦理一区二区 | 美日韩一区二区 | 欧美日韩一区二区在线 | 日本三级2018 | 日韩视频一区二区 | 国产第一区二区三区 | 亚洲视频在线看 | 亚洲欧美在线一区 | 理论片一区| 不卡二区| 91国自产精品中文字幕亚洲 | 精品一区久久 | 激情综合久久 | 久久久久久影院 | 日日干天天干 | 亚洲精品久久久久久久久 | 欧美日韩国产欧美 | 久久99精品久久久久久琪琪 | 视频一区二区三区免费观看 | 久久精品成人 | 亚洲日本中文 | 国产免费国产 | 日韩av在线免费 | 中文一区二区 | 国产精品资源在线 | 免费一区 | 欧美午夜精品久久久 | 黑人巨大精品欧美一区二区小视频 | 国产精品久久久久久久久久新婚 | 欧美日韩一区在线 | 成人精品一区 | 一区二区av在线 | 国产91久久精品一区二区 | 中文一二区 | 国产欧美综合一区二区三区 | 色综合社区| 国产精品亚洲欧美日韩一区在线 | 久久久精品影院 | 亚洲黄色免费 | 毛片激情永久免费 | 亚洲三级免费观看 | 欧美多人在线 | 一区二区三区视频 | 冷水浴在线观看 | 天堂在线中文字幕 | 国产精品欧美久久久久一区二区 | 国产精品2区 | www.五月婷婷 | 成人免费视频网站 | 国产精品一区二区在线 | 五月激情婷婷六月 | 欧美日韩国产一区 | 国产一区二区三区视频 | 成人免费在线观看 | 91在线成人 | 涩涩片影院| 免费在线成人 | 午夜久久av | 99视频在线播放 | 综合久久99| 国产一级一级国产 | 日本一二三视频 | 国产一区二区三区av在线 | 在线看av网址 | 国产精品久久久久久久久岛 | 久久久久久久久国产 | 国产免费黄色 | 国产精成人| 久久精品国产一区二区三区不卡 | 日韩精品一区二区三区在线播放 | 色免费视频 | 日韩国产高清在线 | 国产视频亚洲 | 国产黄色在线免费看 | 婷婷网址| 亚洲成人综合网站 | 久久精品亚洲精品国产欧美 | 国产免费av大片 | 国产亚洲精品成人av久久ww | 天天插天天射天天干 | 国产精品免费观看 | 欧美精品一区二区三区在线 | 久久久久久久国产精品 | 日韩视频一区在线观看 | 蜜臀视频在线观看 | 欧美视频一区二区三区在线观看 | 国内自拍偷拍视频 | 日韩精品免费在线观看 | 精品一区免费 | 九一在线观看 | 国产综合久久久 | 一区在线视频 | 日韩欧美国产精品 | 人人爽在线观看 | 青草青草久热精品视频在线观看 | 精品在线一区二区三区 | 亚洲成人网一区 | 国产精品久久久久久久久久三级 | 成人亚洲一区二区 | 久久国产一区二区 | 成人福利视频 | 日韩在线1 | 中文在线视频 | 超级碰在线视频 | 色婷婷综合网 | 国产欧美在线视频 | 成人影院在线 | 国产欧美精品一区二区三区四区 | 午夜天堂精品久久久久 | 亚洲综合精品久久 | 精品美女在线 | 亚洲精品一区二三区不卡 | 日韩精品在线免费观看视频 | 日韩99 | 国产欧美综合一区二区三区 | 欧美精品一二三 | 亚洲a网| 一区二区三区国产视频 | 免费国产一区 | 亚洲一区二区三区免费 | 亚洲综合视频 | 国产精品极品美女在线观看免费 | 在线观看免费av网 | 免费xxxxx在线观看网站软件 | 国产96在线观看 | 色啪网站 | 午夜在线视频免费观看 | 91精品国产日韩91久久久久久 | 亚洲情网站 | 成人精品鲁一区一区二区 | 毛片久久久 | 国产成人久久 | www.啪啪 | 亚洲一区二区在线电影 | 国产精品视频播放 | 久久在线播放 | 亚洲国产精品麻豆 | 国产成人精品久久久 | 国产精品美女久久久久久久久久久 | 中文字幕国产一区 | 国产日皮视频 | 久久久久久国产精品 | 狠狠久 | 欧美自拍视频 | 九九热精品视频 | 91原创视频在线观看 | 精品在线一区二区三区 | 精品国模一区二区三区欧美 | 亚洲一区 中文字幕 | 国产精品久久久久久久久久免费 | 在线成人国产 | 国产精品久久久久久久久免费 | 色综合av | 国产综合99 | 一级毛片大全免费播放 | 国产日韩精品一区二区 | 亚洲欧美日韩一区 | 荷兰欧美一级毛片 | 日韩欧美在线观看视频 | 久久精品色欧美aⅴ一区二区 | 红桃av一区二区 | 午夜伦理影院 | 热久久这里只有精品 | 久草在线视频网 | 日韩欧美在线一区 | 中文字幕在线第二页 | 国产一区二区在线免费观看 | 国产精品视频播放 | 国产一区二区三区视频在线观看 | 国产依人在线 | 一区二区三区日韩精品 | 亚洲97色 | 风间由美一区二区三区在线观看 | 成人h漫在线观看 | 日韩免费在线 | 黄色小视频在线观看 | 黄色高清视频 | 在线成人av | 狠狠干狠狠操 | 成人av影院| 欧美日韩国产在线看 | 国产精品xxxx | 国产精品久久久久久久久污网站 | 欧美视频一区 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 国产日韩欧美一区 | 亚洲精品国产乱码在线看蜜月 | 伊人精品 | 久艹精品 | 99精品欧美一区二区三区综合在线 | 免费观看欧美一级 | 日本亚洲一区 | 99riav国产一区二区三区 | 国产91 在线播放 | 国产情侣免费视频 | 鲁一鲁影院| 日韩毛片免费视频一级特黄 | 久久福利电影 | 日韩视频在线免费观看 | 97精品国产 | 精品国产精品国产偷麻豆 | 国产一级高清视频 | 91中文字幕在线观看 | 久久国产精品一区 | 91精品久久久久久久久久入口 | 日本成人一二三区 | 国产三区在线成人av | 国产成人精品一区二区三区四区 | 国产精品久久久久一区二区三区 | 亚洲综合二 | 国产精品永久免费 | 亚洲高清免费视频 | 亚洲一级毛片 | 日韩在线免费观看视频 | 亚洲精品aaa| 欧美日视频 | 欧美1级 | 一级毛片免费播放 | 91av国产精品 | 国产一区二区三区在线 | 久久久久成人精品 | av网站在线免费观看 | 欧美伦理一区二区三区 | www.久久99| 国产精品亚洲第一区在线暖暖韩国 | 久久久精品一区二区 | 欧美自拍视频在线 | 久久99精品久久久久国产越南 | 亚洲欧美精品久久 | 亚洲高清中文字幕 | 一区二区三区不卡视频 | 一区二区三区在线免费观看 | a免费在线 | 成人在线网址 | 国产精品永久在线观看 | 日本黄色大片免费观看 | 日韩成人一区二区 | 亚洲午夜视频在线观看 | 久久精品网 | 9色网站 | 亚洲+变态+欧美+另类+精品 | 久久久99日产| 51ⅴ精品国产91久久久久久 | 国产激情视频在线观看 | 欧美激情一区二区 | 蜜桃视频网站在线观看 | 亚洲精品在线播放 | 亚洲一区二区三区视频 | 欧美激情精品久久久久久变态 | 欧美激情一区二区三区四区 | 国内精品亚洲 | 精品一区二区久久久久久久网站 | 亚洲免费在线观看视频 | 一区二区在线视频 | 精品久 | 欧美一级在线 | 久久成人免费视频 | 国产一级视频 | 在线视频日韩 | 夜夜草视频 | 情一色一乱一欲一区二区 | 国产精品一区二区三区在线看 | 免费看一区二区三区 | 精品国产精品 | 亚洲视频在线观看 | 欧美成年黄网站色视频 | 五月婷婷导航 | av天空| 亚洲a人| 最近中文字幕在线视频1 | 一级人爱视频 | 天天操天天操 | 91免费看电影 | 欧美国产日韩在线 | 一级在线毛片 | 亚洲国产自产 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 欧美国产精品一区 | 欧美日韩一区二区三区在线观看 | 亚洲免费视频在线观看 | 91亚洲国产成人久久精品网站 | 国产美女久久久 | 免费av在线| 中文字幕第一页在线视频 | 麻豆freexxxx性91精品 | 欧美久久精品 | 久久久久亚洲精品 | 天天舔日日干 | 五月婷婷导航 | 男人的天堂亚洲 | 91精品一区二区 | 欧美国产精品一区 | 精品免费国产一区二区三区 | 免费精品视频 | av中文在线| 国内久久精品 | 日本不卡一二三 | 欧美国产日韩精品 | av动漫一区二区 | 中文字幕日韩欧美 | 一区二区三区影视 | 91精品久久久久久久91蜜桃 | 国产一区二区av |