青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

本文介紹的是 Qt 選擇性編譯和庫裁減,幫你節(jié)約時(shí)間的一篇文章,先來看內(nèi)容。

AD:

Qt 選擇性編譯裁減是本文將要介紹的內(nèi)容,編譯一次Qt要耗費(fèi)太多的時(shí)間,常常是越著急用它,編起來越慢。其實(shí)通過很簡單的幾招可以幫你節(jié)省編譯的時(shí)間。下面就一一道來:

編譯之前確定哪些功能是不必要的,對(duì)編譯樹進(jìn)行簡單裁剪

比如最常見的,像demos, examples,雖然很有參考價(jià)值,但完全可以放在后面用到的時(shí)候再單獨(dú)編譯小工程,這樣可以節(jié)省不少時(shí)間。經(jīng)過實(shí)踐,最簡單的方法是修改configure文件,在該文件中有個(gè)指定編譯目錄的字段:

  1. QT_DEFAULT_BUILD_PARTS=”libs tools examples demos docs translations” 

可以把examples、demos和docs從這里去掉,但要注意,別的可不能隨便去掉。

如果在后面的使用中發(fā)現(xiàn)有些小工程需要編譯了,可以采用一般編譯Qt程序的方法,即用Qt安裝目錄bin下的qmake來生成Makefile,同樣可以編譯和測(cè)試?yán)哟a,一點(diǎn)也不影響使用。

裁剪Qt模塊

Qt從4版本開始采用了模塊化的形式,將獨(dú)立的功能封裝在獨(dú)立的里,所以可以很簡單的去掉一些不需要的,這樣也能節(jié)省編譯時(shí)間和對(duì)硬盤空間的占用。 Qt的configure配置提供了一些設(shè)置模塊的方法,如它支持-no-svg和-no-webkit,通過configure的時(shí)候加這些選項(xiàng)就可以去掉這部分支持。相應(yīng)的還有很多小的功能可以通過configure參數(shù)的形式配置,具體的參考configure –help的輸出。在查看configure幫助的時(shí)候特別要注意加*號(hào)的內(nèi)容,也就是Qt默認(rèn)的configure選項(xiàng),有的時(shí)候默認(rèn)選項(xiàng)可不一定是討人喜歡的哦。

Qt桌面版本默認(rèn)會(huì)盡量多的編譯feature進(jìn)去,這樣有一定的好處,就是用戶可以用到所有的Qt功能,但壞處也很明顯,那就是編譯出來的Qt超級(jí)大,特別是編譯debug版本,基本上要占1到2G的空間,所以個(gè)人感覺研究一下configure的選項(xiàng)還是很有必要的。另外, 默認(rèn)狀況下有些插件是不會(huì)編譯的,比如數(shù)據(jù)庫插件,往往需要用戶自己根據(jù)需要編譯,這一點(diǎn)也要注意。

針對(duì)嵌入式版本的配置

Qt的嵌入式版本本身就支持feature裁剪,我們可以充分利用這一特性讓Qt庫盡量變小。具體的做法是要做一個(gè)自己的qconfig-[myconfig].h特性文件,該文件中定義你要去掉Qt中的哪些feature。在configure的時(shí)候加“-qconfig myconfig” 選項(xiàng), Qt就會(huì)根據(jù)你給出的配置文件來編譯,以達(dá)到裁剪的目的。這里要強(qiáng)調(diào)一下,這種裁剪方式只適用于嵌入式版本。這里的myconfig可以用任何你喜歡的名字來代替。
在qt的代碼中已經(jīng)給出了一些qconfig頭文件的例子,默認(rèn)編譯采用full config也就是

不裁剪任何feature。所有Qt預(yù)定義好的qconfig文件,可以在src/corelib/global/下找到,包括qconfig-minimal.h, qconfig-small.h, qconfig.medium.h,qconfig-large.h和qconfig-dist.h,也就是從裁剪量由多到少都有據(jù)可依。如果要添加你自己的配置文件,要在src/corelib/global下建立一個(gè)形如qconfig-xxx.h的文件,這個(gè)xxx也就是你要在configure的時(shí)候傳入的qconfig參數(shù)。筆者測(cè)試使用的Qt版本是4.4.1,這個(gè)版本的build system有個(gè)小毛病,就是如果你指定的qconfig參數(shù)實(shí)際上沒有qconfig-xxx.h文件對(duì)應(yīng), build不會(huì)停止,它只會(huì)給出一個(gè)不起眼的提示,編譯過程會(huì)繼續(xù), 這一點(diǎn)挺讓人費(fèi)解的。而且這種情況下Qt編譯使用的配置基本上和fullconfig相同,鑒于它的讓人迷惑的舉動(dòng),個(gè)人覺得有必要提醒大家一下,使用自定義qconfig的時(shí)候一定要確定配置文件放對(duì)了位置,而且qconfig參數(shù)給的正確。

一般我們的建議是在桌面上測(cè)試階段編譯一個(gè)full的版本,再根據(jù)你的項(xiàng)目使用Qt feature的情況總結(jié)哪些可去掉的feature。 feature之間有千絲萬縷的依賴關(guān)系,這個(gè)問題也是困擾很多人的難點(diǎn)所在。具體的依賴可以查閱src/corelib/global/qfeatures.h和src/corelib/global/qfeatures.txt(描述依賴關(guān)系的文檔)。另外,Qt里還提供了一個(gè)可視化的配置依賴的工具,叫做qconfig,在QTDIR/tools/qconfig目錄。該工具需要基于Qt桌面版本編譯。如在我的linux系統(tǒng)下可以用下面的命令來編譯:

  1. $ cd qt-embedded-linux-commercial-4.4.1/tools/qconfig  
  2. $ /usr/local/Trolltech/Qt-4.4.3/bin/qmake  
  3. $ make 

編譯成功后運(yùn)行./qconfig,初始要打開qfeatures.txt. Qconfig讀取該文件生成一個(gè)樹狀圖,該圖很清楚的顯示出feature之間的依賴關(guān)系。如下圖所示,如果你去掉了LINEEDIT這個(gè)feature,用到該控件的combobox也就不能繼續(xù)使用了。有了這個(gè)工具裁剪Qt變得簡潔直觀,方便了很多。

選定了你要去掉的feature后點(diǎn)擊菜單File->Save As..會(huì)彈出保存文件的頁面,文件名字應(yīng)該定義成qconfig-xxx.h的形式,這樣你在configure的時(shí)候就可以傳入相應(yīng)的qconfig參數(shù)了。你還可以通過選擇File->Open打開現(xiàn)有的qconfig-xxx.h文件,通過修改已經(jīng)有的文件更快的編輯配置。

根據(jù)筆者測(cè)試,未經(jīng)裁剪的qte4.4.1編譯出來為:

  1. libQtCore.so是2.6M  
  2. libQtGui.so是9.5M 

如果用small來編譯,就能縮小為:

  1. libQtCore.so是2.0M  
  2. libQtGui.so是5.7M 

差異還是比較明顯的。

小結(jié):Qt 選擇性編譯裁減的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。更多內(nèi)容請(qǐng)參考編輯推薦。

【編輯推薦】

posted @ 2011-07-26 06:38 RTY 閱讀(584) | 評(píng)論 (0)編輯 收藏

#include <QApplication>
#include 
<QLineEdit>
#include 
<qDebug>
#include 
<QTime>
#include 
<QTreeWidget>
#include 
<QStringList>
#include 
<QItemDelegate>
#include 
<QProgressBar>
class ImageDelegate : public QItemDelegate
{


public:
    ImageDelegate(QObject 
*parent = 0):QItemDelegate(parent){};
    QWidget 
*createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                
const QModelIndex &index) const
    {
                QProgressBar 
*progress = new QProgressBar(parent);
                progress
->setValue(20);
                
return progress;
     };
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
        QTreeWidget tree;
        tree.setColumnCount(
2);
        tree.setHeaderLabels(QStringList() 
<< "colum");
        tree.setItemDelegate(
new ImageDelegate(&tree));
        QTreeWidgetItem 
*item1 = new QTreeWidgetItem(&tree);
        item1
->setIcon(0, QIcon("E:\\Audio_MIME.ico"));
        tree.openPersistentEditor(item1);
        QTreeWidgetItem 
*item2 = new QTreeWidgetItem(&tree);
        item2
->setText(0"aaaa");
        tree.show();
    
return a.exec();
}

posted @ 2011-07-25 22:04 RTY 閱讀(1360) | 評(píng)論 (0)編輯 收藏

a.bat

BatchFile code
@echo off call b.bat VarReturn echo 批處理b.bat的返回值是:%VarReturn%


b.bat

BatchFile code
@echo off set /a sum=1+2 set %1=%sum%

posted @ 2011-07-21 21:51 RTY 閱讀(764) | 評(píng)論 (0)編輯 收藏



    從Linux內(nèi)核2.6開始,Linux內(nèi)核的編譯采用Kbuild系統(tǒng),這同過去的編譯系統(tǒng)有很大的不同,尤其對(duì)于Linux內(nèi)核模塊的編譯。在新的系統(tǒng)下,Linux編譯系統(tǒng)會(huì)兩次掃描Linux的Makefile:首先編譯系統(tǒng)會(huì)讀取Linux內(nèi)核頂層的Makefile,然后根據(jù)讀到的內(nèi)容第二次讀取Kbuild的Makefile來編譯Linux內(nèi)核。
Linux內(nèi)核Makefile分類
·         Kernel Makefile 
Kernel Makefile位于Linux內(nèi)核源代碼的頂層目錄,也叫 Top Makefile。它主要用于指定編譯Linux Kernel目標(biāo)文件(vmlinux)和模塊(module)。這編譯內(nèi)核或模塊是,這個(gè)文件會(huì)被首先讀取,并根據(jù)讀到的內(nèi)容配置編譯環(huán)境變量。對(duì)于內(nèi)核或驅(qū)動(dòng)開發(fā)人員來說,這個(gè)文件幾乎不用任何修改。
·         Kbuild Makefile 
Kbuild系統(tǒng)使用Kbuild Makefile來編譯內(nèi)核或模塊。當(dāng)Kernel Makefile被解析完成后,Kbuild會(huì)讀取相關(guān)的Kbuild Makefile進(jìn)行內(nèi)核或模塊的編譯。Kbuild Makefile有特定的語法指定哪些編譯進(jìn)內(nèi)核中、哪些編譯為模塊、及對(duì)應(yīng)的源文件是什么等。內(nèi)核及驅(qū)動(dòng)開發(fā)人員需要編寫這個(gè)Kbuild Makefile文件。
·         ARCH Makefile 
ARCH Makefile位于ARCH/$(ARCH)/Makefile,是系統(tǒng)對(duì)應(yīng)平臺(tái)的Makefile。Kernel Top Makefile會(huì)包含這個(gè)文件來指定平臺(tái)相關(guān)信息。只有平臺(tái)開發(fā)人員會(huì)關(guān)心這個(gè)文件。
Kbuild Makefile
    Kbuild Makefile的文件名不一定是Makefile,盡管推薦使用Makefile這個(gè)名字。大多的Kbuild文件的名字都是Makefile。為了與其他Makefile文件相區(qū)別,你也可以指定Kbuild Makefile的名字為Kbuild。而且如果“Makefile”和“Kbuild”文件同時(shí)存在,則Kbuild系統(tǒng)會(huì)使用“Kbuild”文件。
·         目標(biāo)定義 
Kbuild Makefile的一個(gè)最主要功能就是指定編譯什么,這個(gè)功能是通過下面兩個(gè)對(duì)象指定的obj-?和xxx-objs:
·         obj-?
obj-?指定編譯什么,怎么編譯?其中的“?”可能是“y”或“m”,“y”指定把對(duì)象編譯進(jìn)內(nèi)核中,“m”指定把對(duì)象編譯為模塊。語法如下;
    obj-? = $(target).o
target為編譯對(duì)象的名字。如果沒有指定xxx-objs,這編譯這個(gè)對(duì)象需要的源文件就是$(target).c或$(target).s。如果指定了$(target)-objs,則編譯這個(gè)對(duì)象需要的源文件由$(target)-objs指定,并且不能有$(target).c或$(target).s文件。
·         xxx-objs 
xxx-objs指定了編譯對(duì)象需要的文件,一般只有在源文件是多個(gè)時(shí)才需要它。
只要包含了這兩行,Kbuild Makefile就應(yīng)該可以工作了。
·         嵌套編譯 
有時(shí)一個(gè)對(duì)象可能嵌入到另一個(gè)對(duì)象的目錄下,那個(gè)如何編譯子目錄下的對(duì)象呢?其實(shí)很簡單,只要指定obj_?的對(duì)象為子目錄的名字就可以了:
obj-? = $(sub_target)/
其中“?”可以是“y”或“m”,$(sub_target)是子目錄名字。
·         編譯器選項(xiàng) 
盡管在大多數(shù)情況下不需要指定編譯器選項(xiàng),有時(shí)我們還是需要指定一些編譯選項(xiàng)的。
·         ccflags-y, asflags-y and ldflags-y 
這些編譯選項(xiàng)用于指定cc、as和ld的編譯選項(xiàng)
編譯外部模塊
有時(shí)候我們需要在內(nèi)核源代碼數(shù)的外面編譯內(nèi)核模塊,編譯的基本命令是:
    make -C $(KERNEL_DIR) M=`pwd` modules
我們可以把這個(gè)命令集成到Makefile里,這樣我們就可以只輸入“make”命令就可以了。回想上一章的那個(gè)Makefile,它把Normal Makefile 和Kbuild  Makefile集成到一個(gè)文件中了。為了區(qū)別Kbuild Makefile 和Normal Makefile,這樣我們改寫Makefile為如下形式,并且添加Kbuild Makefile - “Kbuild”。
##Makefile
ifneq ($(KERNELRELEASE),)
include "Kbuild"
else
KERNEL_DIR = /lib/modules/`uname -r`/build
MODULEDIR := $(shell pwd)
.PHONY: modules
default: modules
modules:
        make -C $(KERNEL_DIR)  M=$(MODULEDIR) modules
clean distclean:
        rm -f *.o *.mod.c .*.*.cmd *.ko
        rm -rf .tmp_versions
endif

## Kbuild
MODULE_NAME = helloworld
$(MODULE_NAME)-objs := hello.o
obj-m   := $(MODULE_NAME).o
一般不需要在Makefile里包含如下代碼,這樣寫完全是為了兼容老版本的Kbuild系統(tǒng)。KERNELRELEASE變量在Kernel Makefile里定義的,因此只有在第二次由Kbuild讀取這個(gè)Makefile文件時(shí)才會(huì)解析到Kbuild的內(nèi)容。 
ifneq ($(KERNELRELEASE),)
include "Kbuild"
else
...
endif
外部頭文件
有時(shí)需要連接內(nèi)核源代碼外部的系統(tǒng)頭文件,但Kbuild系統(tǒng)默認(rèn)的系統(tǒng)頭文件都在內(nèi)核源代碼內(nèi)部,如何使用外部的頭文件呢?這個(gè)可以借助于Kbuild系統(tǒng)的特殊規(guī)則:
·         EXTRA_CFLAGS 
EXTRA_CFLAGS可以給Kbuild系統(tǒng)添加外部系統(tǒng)頭文件,
    EXTRA_CFLAGS += $(ext_include_path)
一般外部頭文件可能位于外部模塊源文件的目錄內(nèi),如何指定呢?這可以借助$(src)或$(obj)
·         $(src)/$(obj) 
$(src)是一個(gè)相對(duì)路徑,它就是Makefile/Kbuild文件所在的路徑。同樣$(obj)就是編譯目標(biāo)保存的路徑,默認(rèn)就是源代碼所在路徑。
因此,我們修改Kbuild文件添加 EXTRA_CFLAGS 來包含外部頭文件盡管在這個(gè)驅(qū)動(dòng)里沒有引用外部系統(tǒng)頭文件:
## Kbuild
MODULE_NAME = helloworld
$(MODULE_NAME)-objs := hello.o
EXTRA_CFLAGS := -I$(src)/include
obj-m   := $(MODULE_NAME).o



·         Goal definitions
Example:
   obj-y += foo.o
告訴kbuild,在文件夾中又一個(gè)叫做foo.o的object。foo.o將會(huì)被從foo.c或者foo.S被構(gòu)建。

如果foo.o被構(gòu)建成一個(gè)模塊,則將使用變量obj-mExample:
   obj-$(CONFIG_FOO) += foo.o
$(CONFIG_FOO)要么是y(built-in)要么是m(module)。如果CONFIG_FOO既不是y也不是m,那么文件將不會(huì)被編譯也不會(huì)被連接。
·         Built-in object goals - obj-y
kbuild Makefiles在$(obj-y)列表中為vmlinux指明object文件。這個(gè)列表依靠內(nèi)核的配置。
$(obj-y)中的文件的順序是非常重要的。列表中允許兩個(gè)相同的文件:第一個(gè)實(shí)體將被連接到built-in.o,后面的實(shí)體將會(huì)被忽略。
連接的順序也很重要,因?yàn)樵赽oot過程中某些函數(shù)(module_init()/_initcall)將會(huì)按順序出現(xiàn)。因此,如果改變了連接順序,將會(huì)改變你的SCSI控制器的檢測(cè)順序,你的磁盤也同時(shí)被重新編號(hào)了。
Example:
  #drivers/isdn/i4l/Makefile
  # Makefile for the kernel ISDN subsystem and device drivers.
  # Each configuration option enables a list of files.
  obj-$(CONFIG_ISDN)             += isdn.o
  obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
·         Loadable module goals - obj-m
$(obj-m)指明object文件作為可裝載的內(nèi)核模塊被構(gòu)建。一個(gè)模塊可能從一個(gè)或者多個(gè)源文件被構(gòu)建。kbuild maefile只是簡單的將源文件加到%(obj-m)
Example:
  #drivers/isdn/i4l/Makefile
  obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
注意這里$(CONFIG_ISDN_PPP_BSDCOMP)是m.
Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'。
如果一個(gè)內(nèi)核模塊從多個(gè)源文件構(gòu)建,KBuild就必須要知道你想從哪些部分構(gòu)建模塊。因此,你不得不設(shè)置$(-objs)變量來告訴KBuild。
Example:
  #drivers/isdn/i4l/Makefile
  obj-$(CONFIG_ISDN) += isdn.o
  isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
在這個(gè)例子中,模塊名是isdn.o,Kbuild將會(huì)編譯列在$(isdn-objs)object文件,然后在這些文件的列表中調(diào)用"$(LD) -r"來產(chǎn)生isdn.o。
Kbuild使用后綴-objs,-y來識(shí)別混合的object文件。這允許Makefiles使用變量CONFIG_sambol來決定一個(gè)object是否是混合object的的一部分。
Example:
  #fs/ext2/Makefile
         obj-$(CONFIG_EXT2_FS)        += ext2.o
   ext2-y                       := balloc.o bitmap.o
         ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o

在這個(gè)例子中,如果$(CONFIG_EXT2_FS_XATTR)是y,則xattr.o只是混合object文件ext2.o的一部分。
注意,當(dāng)你構(gòu)造一個(gè)objects到內(nèi)核中時(shí),上面的語法當(dāng)然也能夠工作。因此,如果你讓CONFIG_EXT2=Y,KBuild將會(huì)為你構(gòu)建一個(gè)獨(dú)立的ext2.o文件,并且連接到built-in.o。
·         Library file goals - lib-y
obj-*連接的Objects在指明的文件夾中被用作模塊或者綜合進(jìn)built-in.o。也又可能被列出的objects將會(huì)被包含進(jìn)一個(gè)庫,lib.a。所有用lib-y列出的objects在那個(gè)文件夾中被綜合進(jìn)單獨(dú)的一個(gè)庫。列在obj-y和附加列在lib-y中的Objects將不會(huì)被包含在庫中,因?yàn)樗麄儗?huì)被任意的存取。對(duì)于被連接在lib-m中,連續(xù)的objects將會(huì)被包含在lib.a中。值得注意的是kbuild makefile可能列出文件用作built-in,并且作為庫的一部分。因此,同一個(gè)文件夾可能包含一個(gè)built-in.o和lib.a文件。
Example:
  #arch/i386/lib/Makefile
  lib-y    := checksum.o delay.o
這里講會(huì)創(chuàng)建一個(gè)基于checksum.o和delay.o的庫文件。對(duì)于kbuild,識(shí)別一個(gè)lib.a正在被構(gòu)建,這個(gè)文件夾應(yīng)該被列在libs-y中。lib-y的使用方法通常被限制在lib/和arc/*/lib中。
·         Descending down in directories
一個(gè)Makefile只負(fù)責(zé)在他自己的文件夾中構(gòu)建objects。 在子文件夾中的文件應(yīng)該由子文件夾中的Makefiles來照顧。如果你知道他們,build系統(tǒng)將會(huì)自動(dòng)遞歸地用在子文件夾中的make。
在這種情況下obj-yobj-m就被使用了。ext2存在于不同的文件夾中,Makefile出現(xiàn)在fs/,則告訴kbuild從后面的參數(shù)下來。
Example:
  #fs/Makefile
  obj-$(CONFIG_EXT2_FS) += ext2/
如果CONFIG_EXT2_FS被設(shè)置成y(built-in)或者m(modular),相應(yīng)的obj-變量將會(huì)被設(shè)置,并且kbuild將會(huì)從ext2文件夾繼承下來。Kbuild只會(huì)使用這些信息來決定它需要訪問這些文件夾,而在子文件夾中的Makefile來指明哪些是modules哪些是built-in。
當(dāng)賦值文件夾名字的時(shí)候,使用CONFIG_variable是很好的選擇。這允許kbuild完全的跳過文件夾,而不管CONFIG_option是否是y或者m。
·         Compilation flags
    EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS。
所有的EXTRA_ variables只應(yīng)用在kbuild中,他們被賦值的地方。EXTRA_variables應(yīng)用在kbuild makefile中所有的可執(zhí)行的命令。$(EXTRA_CFLAGS) 指明用$(CC)編譯C文件的時(shí)候的選項(xiàng)。
Example:
  # drivers/sound/emu10k1/Makefile
  EXTRA_CFLAGS += -I$(obj)
  ifdef DEBUG
      EXTRA_CFLAGS += -DEMU10K1_DEBUG
  endif
這里的變量是必須的,因?yàn)轫攲拥腗akefile擁有變量$(CFLAGS)并且用它來作為整個(gè)樹的編譯標(biāo)志當(dāng)編譯匯編源文件的時(shí)候$(EXTRA_AFLAGS),和每個(gè)文件夾的選項(xiàng)是相似的。
Example:
  #arch/x86_64/kernel/Makefile
  EXTRA_AFLAGS := -traditional
$(EXTRA_LDFLAGS)$(EXTRA_ARFLAGS) 對(duì)于每個(gè)文件夾的$(LD)和$(AR)選項(xiàng)是類似的。
Example:
  #arch/m68k/fpsp040/Makefile
  EXTRA_LDFLAGS := -x
CFLAGS_$@, AFLAGS_$@
CFLAGS_$@AFLAGS_$@只應(yīng)用到當(dāng)前kbuild makefile的命令。
$(CFLAGS_$@) 為每個(gè)文件的$(CC)指明選項(xiàng)。$@
部分有一個(gè)字面上的值,指明它是為那個(gè)文件。
Example:
  # drivers/scsi/Makefile
  CFLAGS_aha152x.o =   -DAHA152X_STAT -DAUTOCONF
  CFLAGS_gdth.o    = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
         -DGDTH_STATISTICS
  CFLAGS_seagate.o =   -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
These three lines specify compilation flags for aha152x.o,
gdth.o, and seagate.o
$(AFLAGS_$@) is a similar feature for source files in assembly
languages.
Example:
  # arch/arm/kernel/Makefile
  AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
  AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional

posted @ 2011-07-21 07:24 RTY 閱讀(1349) | 評(píng)論 (0)編輯 收藏

     摘要: QT通過三種形式提供了對(duì)線程的支持。它們分別是,一、平臺(tái)無關(guān)的線程類,二、線程安全的事件投遞,三、跨線程的信號(hào)-槽連接。這使得開發(fā)輕巧的多線程Qt程序更為容易,并能充分利用多處理器機(jī)器的優(yōu)勢(shì)。多線程編程也是一個(gè)有用的模式,它用于解決執(zhí)行較長時(shí)間的操作而不至于用戶界面失去響應(yīng)。在Qt的早期版本中,在構(gòu)建庫時(shí)有不選擇線程支持的選項(xiàng),從4.0開始,線程總是有效的。線程類Qt 包含下面一些線程相...  閱讀全文

posted @ 2011-07-20 07:04 RTY 閱讀(4339) | 評(píng)論 (0)編輯 收藏

     摘要: Linux on Power 上的調(diào)試工具和技術(shù)Calvin Sze (calvins@us.ibm.com), Linux 顧問 , EMC簡介: 調(diào)試是一項(xiàng)主要的軟件開發(fā)活動(dòng),作為應(yīng)用程序開發(fā)人員,您無法避免對(duì)程序進(jìn)行調(diào)試。有效的調(diào)試不僅能縮短軟件開發(fā)周期,而且可以節(jié)省成本。本文簡要介紹了在用戶空間的 C/C++ 和 Java? 應(yīng)用程序中查找 bug 的技術(shù),并介紹了一些...  閱讀全文

posted @ 2011-07-19 07:30 RTY 閱讀(1643) | 評(píng)論 (0)編輯 收藏

     摘要: 概要:GUI (圖形用戶界面graphical user interface)工具自詡其擁有許多的功能。把GUI測(cè)試自動(dòng)化作為一個(gè)編程的項(xiàng)目處理,你將需要一個(gè)和你項(xiàng)目大小相當(dāng)?shù)墓ぞ摺_@是一篇對(duì)你購買的GUI測(cè)試自動(dòng)化產(chǎn)品中你所需的關(guān)鍵功能的梗概。·         在選擇一個(gè)GUI測(cè)試工具需要考慮的...  閱讀全文

posted @ 2011-07-19 06:36 RTY 閱讀(1151) | 評(píng)論 (0)編輯 收藏

1、如何在Release狀態(tài)下進(jìn)行調(diào)試

Project->Setting=>ProjectSetting對(duì)話框,選擇Release狀態(tài)。C/C++標(biāo)簽中的Category選General,Optimizations選Disable(Debug),Debut info選Program Database。在Link標(biāo)簽中選中Generate debug info復(fù)選框。

注:只是一個(gè)介乎Debug和Release的中間狀態(tài),所有的ASSERT、VERIFY都不起作用,函數(shù)調(diào)用方式已經(jīng)是真正的調(diào)用,而不查表,但是這種狀態(tài)下QuickWatch、調(diào)用隊(duì)列跟蹤功能仍然有效,和Debug版一樣。

2、Release和Debug有什么不同

Release版稱為發(fā)行版,Debug版稱為調(diào)試版。

Debug中可以單步執(zhí)行、跟蹤等功能,但生成的可執(zhí)行文件比較大,代碼運(yùn)行速度較慢。Release版運(yùn)行速度較快,可執(zhí)行文件較小,但在其編譯條件下無法執(zhí)行調(diào)試功能。

Release的exe文件鏈接的是標(biāo)準(zhǔn)的MFC DLL(Use MFC in a shared or static dll)。這些DLL在安裝Windows的時(shí)候,已經(jīng)配置,所以這些程序能夠在沒有安裝Visual C++ 6.0的機(jī)器上運(yùn)行。而Debug版本的exe鏈接了調(diào)試版本的MFC DLL文件,在沒有安裝Visual C++6.0的機(jī)器上不能運(yùn)行,因?yàn)槿毕鄳?yīng)的DLL,除非選擇use static dll when link。

3、ASSERT和VERIFY有什么區(qū)別

ASSERT里面的內(nèi)容在Release版本中不編譯,VERIFY里面的內(nèi)容仍然翻譯,但不再判斷真假。所以后者更安全一點(diǎn)。例如ASSERT(file.Open(strFileName))。

一旦到了Release版本中,這一行就忽略了,file根本就不Open()了,而且沒有任何出錯(cuò)的信息。如果用VERIFY()就不會(huì)有這個(gè)問題。

4、Workspace和Project之間是什么樣的關(guān)系

每個(gè)Workspace可以包括幾個(gè)project,但只有一個(gè)處于Active狀態(tài),各個(gè)project之間可以有依賴關(guān)系,在project的Setting..中可以設(shè)定,比如那個(gè)Active狀態(tài)的project可以依賴于其他的提供其函數(shù)調(diào)用的靜態(tài)庫。

5、如何在非MFC程序中使用ClassWizard

在工程目錄下新建一個(gè)空的.RC文件,然后加入到工程中就可以了。

6、如何設(shè)置斷點(diǎn)

按F9在當(dāng)前光標(biāo)處增加一個(gè)斷點(diǎn)和取消一個(gè)斷點(diǎn)。

另外,在編輯狀態(tài)下,按Ctrl+B組合鍵,彈出斷點(diǎn)設(shè)置對(duì)話框。然后單擊【Condition…】按鈕彈出設(shè)置斷點(diǎn)條件的對(duì)話框進(jìn)行設(shè)置。

7、在編輯狀態(tài)下發(fā)現(xiàn)成員變量或函數(shù)不能顯示提示是如何打開顯示功能

這似乎是目前這個(gè)Visual C++ 6.0版本的一個(gè)bug,可按如下步驟使其正常,如再出現(xiàn),可如法炮制:

(1)關(guān)閉Project
(2)刪除“工程名.ncb”文件
(3)重新打開工程

8、如何將一個(gè)通過ClassWizard生成的類徹底刪除

首先在工作區(qū)的FileView中選中該類的.h和.cpp文件,按delete刪除,然后在文件管理器中將這兩個(gè)文件刪除,再運(yùn)行ClassWizard,這時(shí)出現(xiàn)是否移走該類的提示,選擇remove就可以了。

9、如何將在workspace中消失的類找出來

打開該類對(duì)應(yīng)的頭文件,然后將其類名隨便改一下,這個(gè)時(shí)候工作區(qū)就會(huì)出現(xiàn)新的類,再將這個(gè)類改回原來的名字就可以了。

10、如何清除所有的斷點(diǎn)

菜單【Edit】->【Breakpoints…】,打開“Breakpoints”對(duì)話框,單擊【Remove All】按鈕即可。快捷鍵是“Ctrl + Shift + F8”。

11、如何再ClassWizard中選擇未列出的信息

打開“ClassWizard”對(duì)話框,然后切換到“Class Info”頁面。改變“Message filter”,如選擇“Window”,“Message”頁面就會(huì)出現(xiàn)Window的信息。

12、如何檢測(cè)程序中的括號(hào)是否匹配

把光標(biāo)移動(dòng)到需要檢測(cè)的括號(hào)前面,按快捷鍵“Ctrl + ]”。如果括號(hào)匹配正確,光標(biāo)就跳到匹配的括號(hào)處,否則光標(biāo)不移動(dòng),并且機(jī)箱喇叭還會(huì)發(fā)出一聲警告。

13、如何查看一個(gè)宏(或變量、函數(shù))的定義

把光標(biāo)移動(dòng)到要查看的一個(gè)宏上,就比如說最常見的DECLARE_MAP_MESSAGE上按一下F12(或右鍵菜單中的相關(guān)菜單),如果沒有建立瀏覽文件,就會(huì)出現(xiàn)提示對(duì)話框,按【確定】按鈕,然后就會(huì)跳到該宏(或變量、函數(shù))定義的地方。

14、如何添加Lib文件到當(dāng)前工程

單擊菜單【Project】->【Settings…】彈出“Project Setting”對(duì)話框,切換到“Link”標(biāo)簽頁,在“Object/library modules”處輸入Lib文件名稱,不同的Lib之間用空格格開。

15、如何快速刪除項(xiàng)目下的Debug文件夾中臨時(shí)文件

在工作區(qū)的FileView視圖中選中對(duì)應(yīng)的項(xiàng)目,單擊右鍵彈出菜單,選擇【Clean(selection only)】菜單即可。

16、如何快速生成一個(gè)現(xiàn)有工程除了工程名外完全相同的新工程

在新建工程的“New”對(duì)話框中選擇“Custom Appwizard”項(xiàng),輸入新工程的名字,單擊【OK】按鈕。出現(xiàn)“Custom AppWizard”項(xiàng),輸入新工程的名字,單擊【OK】按鈕。出現(xiàn)“Custom AppWizard-Step 1 of 2”對(duì)話框,選擇“An existing Project”項(xiàng),單擊【Next】按鈕。出現(xiàn)“Custom AppWizard-Step 2 of 2”對(duì)話框,選擇現(xiàn)有工程的工程文件名,最后單擊【Finish】按鈕。編譯后就生成一個(gè)與現(xiàn)有工程相同但可以重新取名的工程AppWizard。

現(xiàn)在就可以項(xiàng)用MFC AppWizard一樣用這個(gè)定制的向?qū)АH绻幌胗昧耍梢栽赩isual C++ 6.0安裝目錄下CommonMSDev98Template目錄中刪除該Wizard對(duì)應(yīng)的.awx和.pdb文件。

17、如何解決Visual C++ 6.0不正確連接的問題

情景:明明改動(dòng)了一個(gè)文件,卻要把整個(gè)項(xiàng)目全部重新編譯鏈接一次。剛剛鏈接好,一運(yùn)行,又提示重新編譯鏈接一次。

這是因?yàn)槌霈F(xiàn)了未來文件(修改時(shí)間和創(chuàng)建時(shí)間比系統(tǒng)時(shí)間晚)的緣故。可以這樣處理:找到工程文件夾下的debug目錄,將創(chuàng)建和修改時(shí)間都比系統(tǒng)時(shí)間的文件全部刪除,然后再從新“Rebuild All”一次。

18、引起LNK2001的常見錯(cuò)誤都有哪些

遇到的LNK2001錯(cuò)誤主要為:unresolved external symbol “symbol”。

如果鏈接程序不能在所有的庫和目標(biāo)文件內(nèi)找到所引用的函數(shù)、變量或標(biāo)簽,將產(chǎn)生此錯(cuò)誤信息。

一般來說,發(fā)生錯(cuò)誤的原因有兩個(gè):一是所引用的函數(shù)、變量不存在,拼寫不正確或者使用錯(cuò)誤;其次可能使用了不同版本的鏈接庫。以下是可能產(chǎn)生LNK2001錯(cuò)誤的原因:

<1>由于編碼錯(cuò)誤導(dǎo)致的LNK2001錯(cuò)誤

(1)不相匹配的程序代碼或模塊定義(.DEF)文件導(dǎo)致LNK2001。例如,如果在C++源文件了內(nèi)聲明了一變量“var1”,卻試圖在另一個(gè)文件內(nèi)以變量“var1”訪問改變量。
(2)如果使用的內(nèi)聯(lián)函數(shù)是在.cpp文件內(nèi)定義的,而不是在頭文件內(nèi)定義將導(dǎo)致LNK2001錯(cuò)誤。
(3)調(diào)用函數(shù)時(shí)如果所用的參數(shù)類型和頭函數(shù)聲明時(shí)的類型不符將會(huì)產(chǎn)生LNK2001錯(cuò)誤。
(4)試圖從基類的構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛擬函數(shù)時(shí)將會(huì)導(dǎo)致LNK2001錯(cuò)誤。
(5)要注意函數(shù)和變量的可公用性,只有全局變量、函數(shù)是可公用的。靜態(tài)函數(shù)和靜態(tài)變量具有相同的使用范圍限制。當(dāng)試圖從文件外部方位任何沒有在該文件內(nèi)聲明的靜態(tài)變量時(shí)將導(dǎo)致編譯錯(cuò)誤或LNK2001錯(cuò)誤。

<2>由于編譯和聯(lián)機(jī)的設(shè)置而造成的LNK2001錯(cuò)誤

(1)如果編譯時(shí)使用的是/NOD(/NODERAULTLIB)選項(xiàng),程序所需要的運(yùn)行庫和MFC時(shí)將得到又編譯器寫入目標(biāo)文件模塊,但除非在文件中明確包含這些庫名,否則這些庫不會(huì)被鏈接進(jìn)工程文件。這種情況下使用/NOD將導(dǎo)致LNK2001錯(cuò)誤。
(2)如果沒有為wWinMainCRTStartup設(shè)定程序入口,在使用Unicode和MFC時(shí)將出現(xiàn)“unresolved external on _WinMain@16”的LNK2001錯(cuò)誤信息。
(3)使用/MD選項(xiàng)編譯時(shí),既然所有的運(yùn)行庫都被保留在動(dòng)態(tài)鏈接庫之內(nèi),源文件中對(duì)“func”的引用,在目標(biāo)文件里即對(duì)“__imp__func”的引用。如果試圖使用靜態(tài)庫LIBC.LIB或LIBCMT.LIB進(jìn)行鏈接,將在__imp__func上發(fā)生LNK2001錯(cuò)誤。如果不使用/MD選項(xiàng)編譯,在使用MSVCxx.LIB鏈接時(shí)也會(huì)發(fā)生LNK2001錯(cuò)誤。
(4)使用/ML選項(xiàng)編譯時(shí),如用LIBCMT.LIB鏈接會(huì)在_errno上發(fā)生LNK2001錯(cuò)誤。
(5)當(dāng)編譯調(diào)試版的應(yīng)用程序時(shí),如果采用發(fā)行版模態(tài)庫進(jìn)行鏈接也會(huì)產(chǎn)生LNK2001錯(cuò)誤;同樣,使用調(diào)試版模態(tài)庫鏈接發(fā)行版應(yīng)用程序時(shí)也會(huì)產(chǎn)生相同的錯(cuò)誤。
(6)不同版本的庫和編譯器的混合使用也能產(chǎn)生問題,因?yàn)樾掳娴膸炖锟赡馨缦鹊陌姹緵]有的符號(hào)和說明。
(7)在不同的模塊中使用內(nèi)聯(lián)和非內(nèi)聯(lián)的編譯選項(xiàng)能夠?qū)е翷NK2001錯(cuò)誤。如果創(chuàng)建C++庫時(shí)打開了函數(shù)內(nèi)聯(lián)(/Ob1或/Ob2),但是在描述該函數(shù)的相應(yīng)頭文件里卻關(guān)閉了函數(shù)內(nèi)聯(lián)(沒有inline關(guān)鍵字),只是將得到錯(cuò)誤信息。為避免該問題的發(fā)生,應(yīng)該在相應(yīng)的頭文件中用inline關(guān)鍵字標(biāo)志為內(nèi)聯(lián)函數(shù)。
(8)不正確的/SUBSYSTEM或ENTRY設(shè)置也能導(dǎo)致LNK2001錯(cuò)誤。

19、如何調(diào)試一個(gè)沒有源碼的exe文件調(diào)用的dll

在Visual C++ 6.0中,進(jìn)入“Project Setting”對(duì)話框然后選擇Debug標(biāo)簽頁。通常Visual Studio默認(rèn)“executable for debug session”為可執(zhí)行文件名,但可以將他改成任何你想要的程序。甚至可以指定不同的工作目錄以及傳遞參數(shù)到你的程序。這個(gè)技術(shù)常用來調(diào)試Dlls、名字空間擴(kuò)展、COM對(duì)象和其他從某些EXE以及從第三方的EXE中調(diào)用的plug-in程序。

20、Visual C++ 6.0工程中的項(xiàng)目文件都表示什么

.opt:工程關(guān)于開發(fā)環(huán)境的參數(shù)文件。如工具條位置等信息。
.aps(AppStudio File)資源輔助文件,二進(jìn)制格式,一般不用去管它。
.clw:ClassWizard信息文件,實(shí)際上是INI文件格式,有興趣可以研究一下。有時(shí)候ClassWizard出了問題,手工修改CLW文件可以解決。如果此文件不存在的話,每次用ClassWizard的時(shí)候回提示是否重建。
.dsp(DevelopStudio Project):項(xiàng)目文件,文本格式,不過不熟悉的不要手工修改。
.dsw(DevelopStudio Workspace):是工作區(qū)文件,其他特點(diǎn)和.dsp差不多。
.plg:是編譯信息文件,編譯時(shí)的error和warning信息文件(實(shí)際上是一個(gè)html文件),一般用處不大。在單擊菜單【Tool】->【Option】彈出的對(duì)話框里面有個(gè)選項(xiàng)可以控制這個(gè)文件的生成。
.hpj(Help Project):是生成幫助文件的工程,用microsoft Help Compiler可以處理。
.mdp(Microsoft DevStudio Project):是舊版本的項(xiàng)目文件,如果要打開此文件的話,會(huì)提示你是否轉(zhuǎn)換成新的.dsp格式。
.bsc:是用于瀏覽項(xiàng)目信息的,如果用Source Brower的話就必須有這個(gè)文件。如果不用這個(gè)功能的話,可以在Project Options里面去掉Generate Browse Info File,這樣可以加快編譯速度。
.map是執(zhí)行文件的映象信息記錄文件,除非對(duì)系統(tǒng)底層,這個(gè)文件一般用不著。
.pch(Pre-Compiled File):是與編譯文件,可以加快編譯速度,但是文件非常大。
.pdb(Program Database):記錄了程序有關(guān)的一些數(shù)據(jù)和調(diào)試信息,在調(diào)試的時(shí)候可能有用。
.exp:只有在編譯DLL的時(shí)候才會(huì)生成,記錄了DLL文件的一些信息,一般也沒有用。
.ncb:無編譯瀏覽文件(no compile browser)。當(dāng)自動(dòng)完成功能出問題時(shí)可以刪除此文件。編譯工程后會(huì)自動(dòng)生成。

posted @ 2011-07-17 23:03 RTY 閱讀(270) | 評(píng)論 (0)編輯 收藏

雙緩沖的原理可以這樣形象的理解:把電腦屏幕看作一塊黑板。首先我們?cè)趦?nèi)存環(huán)境中建立一個(gè)“虛擬“的黑板,然后在這塊黑板上繪制復(fù)雜的圖形,等圖形全部繪制完畢的時(shí)候,再一次性的把內(nèi)存中繪制好的圖形“拷貝”到另一塊黑板(屏幕)上。采取這種方法可以提高繪圖速度,極大的改善繪圖效果。

  例如在OnDraw()函數(shù)中可以如下所述實(shí)現(xiàn)雙緩沖,其主要步驟分為四步:

 CPen Pen;
 Pen.CreatePen(PS_INSIDEFRAME,1,#e1e100);
 CBrush Brush;
 Brush.CreateSolidBrush(#e1e100);
 CDC dcMem;
 CBitmap bm;
 CRect rc;
 GetClientRect(&rc);
 // Step 1:為屏幕DC創(chuàng)建兼容的內(nèi)存DC :CreateCompatibleDC()
 dcMem.CreateCompatibleDC(pDC);
 // Step 2:創(chuàng)建位圖:CreateCompatibleBitmap()
 bm.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
 // Step 3:把位圖選入設(shè)備環(huán)境:SelectObject(),可以理解為選擇畫布
 dcMem.SelectObject(&bm); 
 dcMem.SelectObject(Pen);
 dcMem.SelectObject(Brush);
 dcMem.Ellipse(0,0,50,50);//畫橢圓
 // Step 4:把繪制好的圖形“拷貝“到屏幕上:BitBlt()
 pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);
 dcMem.DeleteDC();
 bm.DeleteObject();

  這樣便實(shí)現(xiàn)了雙緩沖,通過這個(gè)方法可以防止在VC中畫圖時(shí)出現(xiàn)屏幕閃爍的情況。

posted @ 2011-07-17 22:54 RTY 閱讀(221) | 評(píng)論 (0)編輯 收藏

     摘要: 詳解QT 信號(hào)機(jī)制 (下篇)2011-07-05 18:40 佚名 互聯(lián)網(wǎng) 我要評(píng)論(1) 字號(hào):T | T信號(hào)不是Unix中進(jìn)程間通信的信號(hào)。這里的信號(hào)更多地與圖形界面的輸入輸出聯(lián)系在一起(當(dāng)然也可以是不可見的操作)。先來看內(nèi)容。AD:繼續(xù) 詳解QT 信號(hào)機(jī)制 (上篇) 的內(nèi)容接續(xù)介紹,本節(jié)介紹的是詳解QT 信號(hào)機(jī)制 (下篇),以下是Q...  閱讀全文

posted @ 2011-07-14 07:41 RTY 閱讀(350) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共31頁: First 12 13 14 15 16 17 18 19 20 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美性感一类影片在线播放| 久久青草久久| 国产精品羞羞答答| 欧美日韩国产成人在线| 久久久亚洲人| 久久米奇亚洲| 久久一区激情| 欧美第一黄色网| 欧美日韩高清免费| 国产精品久久国产精麻豆99网站| 欧美日韩少妇| 国产精品久久久久免费a∨大胸 | 国产精品va在线播放我和闺蜜| 久久综合九色综合网站| 久久午夜精品| 欧美精品日本| 国产精品露脸自拍| 国产亚洲一区精品| 亚洲精品中文字| 亚洲欧美另类久久久精品2019| 亚洲永久免费av| 噜噜噜躁狠狠躁狠狠精品视频| 久久久999精品免费| 久久久久国产精品人| 理论片一区二区在线| 你懂的网址国产 欧美| 亚洲国产精品999| 最新国产精品拍自在线播放| 国产精品你懂的在线| 国产精品一区二区三区四区五区 | 久久精品国产一区二区电影 | 一片黄亚洲嫩模| 午夜欧美精品| 欧美黄在线观看| 亚洲欧洲一区| 久久一二三四| 欧美一区二区三区视频在线| 激情丁香综合| 亚洲一区二区高清| 蜜臀久久99精品久久久画质超高清 | 一区二区高清| 久久午夜精品| 国产香蕉97碰碰久久人人| 在线观看一区视频| 久久精品国产999大香线蕉| 亚洲盗摄视频| 久久久91精品国产一区二区精品| 欧美1区2区| 好吊一区二区三区| 欧美专区第一页| 亚洲最新在线| 欧美精品一区二区精品网 | 男女激情视频一区| 午夜亚洲性色福利视频| 欧美精品色一区二区三区| 禁久久精品乱码| 久久久www成人免费精品| 99这里有精品| 欧美日韩第一区日日骚| 亚洲日韩成人| 亚洲国产欧美一区二区三区同亚洲| 香蕉av777xxx色综合一区| 欧美视频不卡中文| 亚洲网友自拍| 亚洲午夜一区| 国产精品扒开腿爽爽爽视频| 在线免费观看成人网| 久久精品99久久香蕉国产色戒| 亚洲免费观看高清在线观看| 久久精品日韩| 亚洲国产精品成人精品| 欧美在线国产| 久久精品国产91精品亚洲| 99re热精品| 欧美日韩一区免费| 亚洲网站啪啪| 在线一区亚洲| 国产欧美午夜| 蜜桃av综合| 欧美极品在线播放| 午夜在线电影亚洲一区| 亚洲一区免费看| 国产综合色产在线精品| 玖玖玖国产精品| 欧美大学生性色视频| av成人动漫| 亚洲欧美日韩成人| 一区二区亚洲精品国产| 欧美本精品男人aⅴ天堂| 麻豆免费精品视频| 一本综合久久| 欧美与黑人午夜性猛交久久久| 激情综合色综合久久| 亚洲国产午夜| 国产精品视频一| 欧美福利视频| 国产精品欧美日韩久久| 另类av导航| 欧美午夜欧美| 欧美**字幕| 国产伦精品一区二区三区高清版| 久久―日本道色综合久久| 麻豆国产精品va在线观看不卡| 日韩一级黄色av| 久久丁香综合五月国产三级网站| 亚洲国产视频直播| 亚洲欧美日韩国产综合精品二区 | 韩国一区二区三区在线观看| 欧美一区成人| 欧美国产三级| 蜜臀va亚洲va欧美va天堂| 欧美日韩在线直播| 免费亚洲一区二区| 国产精品一国产精品k频道56| 老司机精品导航| 国产乱子伦一区二区三区国色天香| 免费人成精品欧美精品| 国产精品久久国产精品99gif | 欧美日韩国产小视频| 欧美一区免费| 欧美日韩国产综合视频在线| 午夜影院日韩| 国产精品va在线播放我和闺蜜| 久久色中文字幕| 国产精品久久久爽爽爽麻豆色哟哟| 看片网站欧美日韩| 国产亚洲第一区| 亚洲一区视频在线| 亚洲图片你懂的| 欧美日韩福利| 亚洲精品欧美日韩| 亚洲精品一区二区三区在线观看 | 91久久精品日日躁夜夜躁国产| 狠狠v欧美v日韩v亚洲ⅴ| 久久国产夜色精品鲁鲁99| 亚洲综合视频1区| 午夜精品美女自拍福到在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久久xxx| 一区二区三区**美女毛片 | 一区二区三区免费看| 亚洲韩日在线| 欧美在线黄色| 一本色道久久综合亚洲精品不卡 | 91久久国产综合久久| 亚洲第一成人在线| 亚洲欧美视频| 国产精品都在这里| 一区二区电影免费在线观看| 一区二区三区鲁丝不卡| 久久久免费av| 亚洲尤物视频网| 国产欧美日韩亚洲精品| 亚洲精品国产精品久久清纯直播| 午夜亚洲视频| 亚洲午夜久久久久久尤物| 欧美裸体一区二区三区| 国产午夜精品久久久| 亚洲欧美激情视频在线观看一区二区三区 | 性做久久久久久久久| 欧美aⅴ99久久黑人专区| 日韩亚洲欧美一区| 国产视频亚洲| 久久久久国产一区二区三区| 午夜精品免费视频| 亚洲人成网站在线播| 久久亚洲精品一区二区| 国产伦理精品不卡| 欧美一区国产在线| 久久精品夜色噜噜亚洲a∨| 国产精品羞羞答答xxdd| 欧美一区二区在线观看| 午夜在线成人av| 亚洲二区在线| 一本大道久久a久久精品综合| 国产精品免费视频xxxx| 欧美一区二区三区成人| 久久电影一区| 西瓜成人精品人成网站| 久久久五月天| 欧美一区二区三区电影在线观看| 午夜精品久久久久久久久久久久久 | 精品成人一区二区三区| 欧美成人激情视频| 国产伦精品一区二区三区高清| 免费看的黄色欧美网站| 欧美日韩亚洲激情| 亚洲精品一区中文| 亚洲国产日韩欧美在线图片| 亚洲精品1区2区| 91久久中文| 欧美高清视频一区二区| 欧美在线免费看| 国产精品美女| 亚洲欧美视频在线观看| 亚洲精品资源美女情侣酒店| 9i看片成人免费高清| 91久久在线播放| 欧美日韩hd| 亚洲视频一区二区在线观看|