10月21日
关于Ubuntu中编译Qt4出错的问题
今天在进行Qt4初体验的时候发现,照搬书上的源代码竟然也会出错。
==================================================
#include <QApplication>
#include <QString>
#include <QLabel>
#include <QWidget>
#include <QDebug>
#include <QTextStream>
int main(int argc, char * argv[]){
QApplication myapp(argc, argv);
QWidget wid;
qDebug() << "sizeof widget: " << sizeof(wid)
<< " sizeof qapplication: " << sizeof(myapp)
<< endl;
QString message;
QTextStream buf(&message);
buf << "A QWidget is " << sizeof(wid) << "bytes. /nA QObject is " << sizeof(QObject)
<< "bytes. /nA QApplication is " << sizeof(myapp) << "bytes." << endl;
qDebug() << message;
QLabel label(message);
return myapp.exec();
};
==================================================
具体报错为:QApplication not found or not such a file 之类的一大堆。由于是用的Ubuntu在线安装的Qt4,故一般不会出现类库缺失或者无法使用的情况。根据以往的经验,问题计有可能出在编译器上。
执行:
~$ export
显示系统环境变量,可以找到类库的路径,没问题。
~$ qmake -v
QMake version 2.01a
Using Qt version 3.2 in /usr/lib
问题出来了,由于我们这个测试程序是基于Qt4的,在Qt3下是无法编译通过的,因此应该将编译器改为Qt4。但是我明明在系统中安装的是Qt4,没有用Qt3啊~~于是继续:
~$ which qmake
qmake: /etc/alternatives
ok,找到了,
~$ cd /etc/alternatives
找到qmake,是一个链接,找到它的源文件,竟然是/usr/bin/qmake-qt3 !!!!原来如此。接下来就简单了,删掉这个链接,然后做一个到/usr/bin/qmake-qt4的链接就ok了。如下:
~$ sudo rm /etc/alternatives/qmake
~$ sudo ln -s /usr/bin/qmake-qt4 /etc/alternatives/qmake
再试一下,现在系统的Qt版本,
~$ qmake -v
QMake version 2.01a
Using Qt version 4.3.4 in /usr/lib
哈哈,搞定,编译及结果:
~$ qmake -project
~$ qmake
~$ make
默认结果是一个名为qt的可执行程序(当然也可以在Makefile中将 TARGET 项改为别的名字),执行之:
~$ ./qt
"A QWidget is 20bytes.
A QObject is 8bytes.
A QApplication is 8bytes.
"
通过!
==================================================
#include <QApplication>
#include <QString>
#include <QLabel>
#include <QWidget>
#include <QDebug>
#include <QTextStream>
int main(int argc, char * argv[]){
QApplication myapp(argc, argv);
QWidget wid;
qDebug() << "sizeof widget: " << sizeof(wid)
<< " sizeof qapplication: " << sizeof(myapp)
<< endl;
QString message;
QTextStream buf(&message);
buf << "A QWidget is " << sizeof(wid) << "bytes. /nA QObject is " << sizeof(QObject)
<< "bytes. /nA QApplication is " << sizeof(myapp) << "bytes." << endl;
qDebug() << message;
QLabel label(message);
return myapp.exec();
};
==================================================
具体报错为:QApplication not found or not such a file 之类的一大堆。由于是用的Ubuntu在线安装的Qt4,故一般不会出现类库缺失或者无法使用的情况。根据以往的经验,问题计有可能出在编译器上。
执行:
~$ export
显示系统环境变量,可以找到类库的路径,没问题。
~$ qmake -v
QMake version 2.01a
Using Qt version 3.2 in /usr/lib
问题出来了,由于我们这个测试程序是基于Qt4的,在Qt3下是无法编译通过的,因此应该将编译器改为Qt4。但是我明明在系统中安装的是Qt4,没有用Qt3啊~~于是继续:
~$ which qmake
qmake: /etc/alternatives
ok,找到了,
~$ cd /etc/alternatives
找到qmake,是一个链接,找到它的源文件,竟然是/usr/bin/qmake-qt3 !!!!原来如此。接下来就简单了,删掉这个链接,然后做一个到/usr/bin/qmake-qt4的链接就ok了。如下:
~$ sudo rm /etc/alternatives/qmake
~$ sudo ln -s /usr/bin/qmake-qt4 /etc/alternatives/qmake
再试一下,现在系统的Qt版本,
~$ qmake -v
QMake version 2.01a
Using Qt version 4.3.4 in /usr/lib
哈哈,搞定,编译及结果:
~$ qmake -project
~$ qmake
~$ make
默认结果是一个名为qt的可执行程序(当然也可以在Makefile中将 TARGET 项改为别的名字),执行之:
~$ ./qt
"A QWidget is 20bytes.
A QObject is 8bytes.
A QApplication is 8bytes.
"
通过!