ubuntu安装QTE的问题

PC所用 Linux系统版本:Ubuntu8.10

Qt/Embedded版本:qt- embedded-linux-opensource-src-4.4.3

Qt/X11版本:qt-x11-opensource-src-4.4.3

(这两个版本时目前最新的,且在官网 上都有下载)

整个安装过程,其实也就时几个指令的问题:

------>解压缩Qt/Embedded, 指令tar zxvf qt- embedded-linux-opensource-src-4.4.3.tar.gz

------>为以后方便观看,可将解压缩后的文件夹重命名为qte:mv qt- embedded-linux-opensource-src-4.4.3 qte

------>进入qte文件夹,进行配置,我的指令是:./comfigure -prefix /opt/qte -qt-mouse-linuxup -qvfb

(其中-qvfb是必须的,否则你编译完后发现自己的Qt/E连qvfb调试器都不支持,白忙活一场,

-prefix /opt/qte是指将最终编译得到的各种工具,如qvfb,qmke,designer等以及库都安装在指定路径/opt/qte,当然这个选项你也可以不写,如果你不写的话系统编译后会自动帮你创建一个/usr/local/trolltech/qt...目录,上面所说的文件就都安装在这个目录下了;但是如果你要安装在 指定目录下的话,必须要先手动创建这么一个目录,如我这个就必须先在执行./configure命令之前先创建/opt/qte目录,否则会出错,又白忙活了。

如果你还要用到数据库mysql等其他一些内容的时候,一定要看 ./configure --help帮助文档,必要时可以先测试一下这个选项,如果只有一个选项 的话,configure是很快的,特别是有错误发生的时候)

整个安装过程大概就只有./congigure是又技术含量的,其他的就没什么好操作的了,接着的步骤:

--------->make(相当漫长的过程)

---------->make install(很多网上的帖子都没这一步,如上面所说,这一步就是将编译后的各种工具、库等安装 到你先前指定的目录)

---------->设定环境变量(这是新手很头疼的问题,其实弄清楚后也挺简单的,就是给你的指令指定 一个可执行的路径,具体实现为 :

在你的用户目录下【若为管理员账户,则为/root,若为普通用户,则在/home/你的用户名】,修改 .bashrc文件。打开 .bashrc文件,在文件末尾添加这么几行

export QTDIR  = /opt/qpe

export QTEDIR  = $QTDIR

export  PATH  = /opt/qte/bin:$PATH

export LD_LIBRARY_PATH = opt/qte/lib:$LD_LIBRARY_PATH

保存,搞定。这样,以后你只要 在终端输入qmake或make或designer 等指令就可以直接使用qmake等工具了,而不再需要进入到/opt/qte/bin里面来执行./qmake了 ,这就是环境变量的作用。)

Qt/Embedded的安装到此告一段落,接着轮到Qt/X11,这个就简单多了,因为它在./configure时没什么要求。

----------->解压缩,tar zxvf .....

----------->更改解压缩后的文件名为qt(仅仅是为了个人方便):mv  ....   qt

------------>进入qt文件夹,执行./configure -prefix /opt/qt (仅需一个选项)

------------->make(更加漫长的过程)

-----------make install

------------>进入到解压缩文件夹qt里的tool/qvfb目录,输入make

------------>将qt文件夹里的bin/qvfb复制到/opt/qte/bin目录 下

最后两个步骤是为了生成qvfb。用于调试程序,可进入到qte/demos/chip下,调试一个例程看看qvfb是否已经安装成功。

#qvfb &

# ./chip -qws

便会 看到 qvfb上显示有相关例程的图像了。

到此,安装过程全部结束,我算了下 ,总共要花7个多小时……累

如果在.配置指令/configure ……执行后,发生错误,可以进入到解压缩文件目录(如qt/,qte/),执行make configclean便可将前面所有的配置都清除掉。

在qt和qte make install 完后,可 执行 make clean将中间生成的许多.o文件清楚,这些临时文件要占很大一部分空间。

--------------------------------------------------------------------------------------------------------------------------------------------

出现的问题

编译结束后我尝试的步骤如下: (着急的直接看最后几行!!)
1.进入qvfb源码目录:
# cd /home/src/qt-x11-opensource-src-4.4.3/tools/qvfb
2.执行qmake生成pro工程:
# /home/src/qt-x11-opensource-src-4.4.3/bin/qmake -project
3.执行qmake生成Makefile
# /home/src/qt-x11-opensource-src-4.4.3/bin/qmake
4.编译make
# make

有错误:
g++ -c -pipe -g -O2 -Wall -W -D_REENTRANT -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../mkspecs/linux-g++ -I. -I../../include/QtCore -I../../include/QtCore -I../../include/QtGui -I../../include/QtGui -I../../include -I. -I.moc/release-shared -I.uic/release-shared -o .obj/release-shared/qvfb.o qvfb.cpp
qvfb.cpp:47:24: 错误:deviceskin.h:没有那个文件或目录
qvfb.cpp: In member function ‘void QVFb::init(int, int, int, int, int, const QString&)’:
qvfb.cpp:247: 警告:检测到调用 delete 运算符时可能出现的问题:
qvfb.cpp:247: 警告:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 警告:forward declaration of ‘struct DeviceSkin’
qvfb.cpp:247: 附注:析构函数和类特定的 delete 运算符均不会被调用,即使它们在类定义时已经声明。
qvfb.cpp:257: 错误:‘DeviceSkinParameters’ 在此作用域中尚未声明
qvfb.cpp:257: 错误:expected `;'' before ‘parameters’
qvfb.cpp:259: 错误:‘parameters’ 在此作用域中尚未声明
qvfb.cpp:259: 错误:‘DeviceSkinParameters’ is not a class or namespace
qvfb.cpp:260: 错误:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 错误:forward declaration of ‘struct DeviceSkin’
qvfb.cpp:261: 错误:对 ‘QVFb::connect(DeviceSkin*&, const char [13], QVFb* const, const char [13])’ 的调用没有匹配的函数
../../include/QtCore/../../src/corelib/kernel/qobject.h:197: 附注:备选为: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
../../include/QtCore/../../src/corelib/kernel/qobject.h:302: 附注:         bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
qvfb.cpp:277: 错误:对 ‘QVFbX11View::QVFbX11View(int&, int&, int&, int&, QVFbAbstractView::Rotation&, DeviceSkin*&)’ 的调用没有匹配的函数
qvfbx11view.h:52: 附注:备选为: QVFbX11View::QVFbX11View(int, int, int, int, QVFbAbstractView::Rotation, QWidget*)
qvfbx11view.h:49: 附注:         QVFbX11View::QVFbX11View(const QVFbX11View&)
qvfb.cpp:280: 错误:对 ‘QVFbView::QVFbView(int&, int&, int&, int&, QVFbAbstractView::Rotation&, DeviceSkin*&)’ 的调用没有匹配的函数
qvfbview.h:109: 附注:备选为: QVFbView::QVFbView(int, int, int, int, QVFbAbstractView::Rotation, QWidget*)
qvfbview.h:106: 附注:         QVFbView::QVFbView(const QVFbView&)
qvfb.cpp:281: 错误:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 错误:forward declaration of ‘struct DeviceSkin’
qvfb.cpp:284: 错误:对 ‘QVFb::connect(DeviceSkin*&, const char [37], QVFbAbstractView*&, const char [37])’ 的调用没有匹配的函数
../../include/QtCore/../../src/corelib/kernel/qobject.h:197: 附注:备选为: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
../../include/QtCore/../../src/corelib/kernel/qobject.h:302: 附注:         bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
qvfb.cpp:285: 错误:对 ‘QVFb::connect(DeviceSkin*&, const char [39], QVFbAbstractView*&, const char [39])’ 的调用没有匹配的函数
../../include/QtCore/../../src/corelib/kernel/qobject.h:197: 附注:备选为: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
../../include/QtCore/../../src/corelib/kernel/qobject.h:302: 附注:         bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
qvfb.cpp:287: 错误:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 错误:forward declaration of ‘struct DeviceSkin’
qvfb.cpp:289: 错误:对 ‘QVFb::setCentralWidget(DeviceSkin*&)’ 的调用没有匹配的函数
../../include/QtGui/../../src/gui/widgets/qmainwindow.h:116: 附注:备选为: void QMainWindow::setCentralWidget(QWidget*)
qvfb.cpp:302: 错误:对 ‘QVFbX11View::QVFbX11View(int, int, int, int&, QVFbAbstractView::Rotation&, DeviceSkin*&)’ 的调用没有匹配的函数
qvfbx11view.h:52: 附注:备选为: QVFbX11View::QVFbX11View(int, int, int, int, QVFbAbstractView::Rotation, QWidget*)
qvfbx11view.h:49: 附注:         QVFbX11View::QVFbX11View(const QVFbX11View&)
qvfb.cpp:305: 错误:对 ‘QVFbView::QVFbView(int, int, int, int&, QVFbAbstractView::Rotation&, DeviceSkin*&)’ 的调用没有匹配的函数
qvfbview.h:109: 附注:备选为: QVFbView::QVFbView(int, int, int, int, QVFbAbstractView::Rotation, QWidget*)
qvfbview.h:106: 附注:         QVFbView::QVFbView(const QVFbView&)
qvfb.cpp:306: 错误:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 错误:forward declaration of ‘struct DeviceSkin’
qvfb.cpp: In member function ‘void QVFb::enableCursor(bool)’:
qvfb.cpp:379: 错误:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 错误:forward declaration of ‘struct DeviceSkin’
qvfb.cpp: In member function ‘void QVFb::setZoom(double)’:
qvfb.cpp:453: 错误:invalid use of undefined type ‘struct DeviceSkin’
qvfb.h:53: 错误:forward declaration of ‘struct DeviceSkin’
qvfb.cpp: In member function ‘void QVFb::skinConfigChosen(int)’:
qvfb.cpp:771: 错误:‘DeviceSkinParameters’ 在此作用域中尚未声明
qvfb.cpp:771: 错误:expected `;'' before ‘parameters’
qvfb.cpp:773: 错误:‘parameters’ 在此作用域中尚未声明
qvfb.cpp:773: 错误:‘DeviceSkinParameters’ is not a class or namespace
make: *** [.obj/release-shared/qvfb.o] 错误 1

差点就放弃了。后来仔细看了一下编译错误。估计主要是差个头文件:
qvfb.cpp:47:24: 错误:deviceskin.h:没有那个文件或目录

一般差头文件会导致cpp文件中很多数据结构和常量没有定义。找到头文件deviceskin.h在qt-x11-opensource-src-4.4.3/tools/shared/deviceskin/下面。拷贝到qvfb文件夹下。再编译:

编译没有问题,连接出错:

.obj/release-shared/qvfb.o: In function `QVFb::setZoom(double)'':
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:453: undefined reference to `DeviceSkin::setTransform(QMatrix const&)''
.obj/release-shared/qvfb.o: In function `QVFb::enableCursor(bool)'':
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:379: undefined reference to `DeviceSkin::hasCursor() const''
.obj/release-shared/qvfb.o: In function `QVFb::skinConfigChosen(int)'':
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:773: undefined reference to `DeviceSkinParameters::read(QString const&, DeviceSkinParameters::ReadMode, QString*)''
.obj/release-shared/qvfb.o: In function `QVFb::init(int, int, int, int, int, QString const&)'':
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:259: undefined reference to `DeviceSkinParameters::read(QString const&, DeviceSkinParameters::ReadMode, QString*)''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:260: undefined reference to `DeviceSkin::DeviceSkin(DeviceSkinParameters const&, QWidget*)''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:281: undefined reference to `DeviceSkin::setView(QWidget*)''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:297: undefined reference to `DeviceSkinParameters::hasSecondaryScreen() const''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:298: undefined reference to `DeviceSkinParameters::secondaryScreenSize() const''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/qvfb.cpp:306: undefined reference to `DeviceSkin::setSecondaryView(QWidget*)''
.obj/release-shared/x11keyfaker.o: In function `X11KeyFaker::sendKeyEvent(int, bool)'':
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:475: undefined reference to `XTestFakeKeyEvent''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:459: undefined reference to `XTestFakeKeyEvent''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:468: undefined reference to `XTestFakeKeyEvent''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:454: undefined reference to `XTestFakeKeyEvent''
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:447: undefined reference to `XTestFakeKeyEvent''
.obj/release-shared/x11keyfaker.o:/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:459: more undefined references to `XTestFakeKeyEvent'' follow
.obj/release-shared/x11keyfaker.o: In function `X11KeyFaker::connect()'':
/home/src/qt-x11-opensource-src-4.4.3/tools/qvfb/x11keyfaker.cpp:544: undefined reference to `XTestQueryExtension''
collect2: ld 返回 1
make: *** [qvfb] 错误 1


能看出来有两个方面的错误,一个是DeviceSkinParameters类的函数连接,另一个XTestFakeKeyEvent函数的问题。

我尝试的解决办法:

qt-x11-opensource-src-4.4.3/tools/shared/deviceskin/下deviceskin.h,deviceskin.cpp都拷到qvfb文件夹下面,重新生成pro工程、Makefile文件,再执行make.

在Makefile文件中LIBS里面添加-lXtst选项。。 再次make。 OK!!

生成的qvfb正确运行。。

总结起来解决办法是:

1。复制deviceskin.h,deviceskin.cpp到qvfb文件下。

2。在qvfb文件夹下手动生成qvfb工程。

3。修改Makefile 中 LIBS 选项: 添加 -lXtst选项,ubuntu默认没有安装libxtst,需要自己手动安装,sudo apt-get install libxtst-dev。

编译。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值