• 10087阅读
  • 14回复

share:我在使用qtopia时的一些问题和解决. 希望大家都能共享自己的经验 [复制链接]

上一主题 下一主题
离线coolflowers
 
只看楼主 倒序阅读 楼主  发表于: 2006-05-07
我用的是 qtopia-free-1.6.0
系统是red hat 8.0
在qtopia达建好以后,首先我写了一个shell, 以便以后方便的运行qtopia,
贴出:
  1. export QTOPIADIR=/root/qtopia/qtopia_1.6_install
  2. export QPEDIR=$QTOPIADIR/qtopia-free-1.6.0
  3. export TMAKEDIR=$QTOPIADIR/tmake-1.11
  4. export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
  5. export PATH=$TMAKEDIR/bin:$PATH
  6. export QTEDIR=$QTOPIADIR/qt-2.3.4
  7. export PATH=$QTOPIADIR/qt-2.3.4$QTDIR/bin:$PATH
  8. export LD_LIBRARY_PATH=$QTOPIADIR/qt-2.3.4/lib:$LD_LIBRARY_PATH
  9. export PATH=$QTOPIADIR/qt-2.3.2/bin:$PATH
  10. export LD_LIBRARY_PATH=$QTOPIADIR/qt-2.3.2/lib:$LD_LIBRARY_PATH
  11. export QT3DIR=$QTOPIADIR/qt-x11-free-3.1.2
  12. export PATH=$QTOPIADIR/qt-x11-free-3.1.2/bin:$PATH
  13. export LD_LIBRARY_PATH=$QTOPIADIR/qt-x11-free-3.1.2/lib:$LD_LIBRARY_PATH
  14. export QTDIR=$QTEDIR
  15. export QPEDIR=$QTOPIADIR/qtopia-free-1.6.0
  16. export PATH=$QPEDIR/bin:$PATH
  17. export QTDIR=$QTEDIR


QTOPIADIR=/root/qtopia/qtopia_1.6_install 这个目录是你所有的相关文件存放的地方.
red hat 有自己的qt, 但是这里我自己编译了qt-x11-free-3.1.2.
大家自己根据情况修改.

这里设置环境变量要当心出错, 我就犯了粗心达意的毛病, 吃了不少亏

我将这个shell存为/root/shell/qtopia.shell

下面就是要这个shell生效,
#source /root/shell/qtopia.shell

现在可以看一下你达建的平台了,

#qvfb & //后台运行
#qpe &

OK, 看到效果了吗? 我想大家都会看到你期待很久的东西, 如果还没用,那么也许你应该在检查前面是否有什么问题.

到了这里, 当时的我心情非常开心: 终于可以开始我的应用开发实验了! 可是我高兴的太早了 ! 问题接踵而至.

1.当我关掉当前的qvfb窗口, 尝试再次运行时:
#qvfb &
正常
#qpe &
Can't open framebuffer device /dev/fb0
Transformed driver cannot connect

还好,google了一下,找到了解决方法:
(引用一下别人:)
" 其实问题出在qpe.conf这个文件,里面的变量发生了变化.
有两中方法解决:
1.在qvfb之前加上一句export QWS_DISPLAY=QVFb:0;
2.如果上述方法不行,哪只能从你的备份中把/root/Settings的qpe.conf替换,
最坏的是重新在来一边! "

我将qpe.conf 给rm 了
呵呵,你有没有解决?

2下面也许你要自己动手写一个简单的程序, 我是这样, 一厢情愿的以为所有的问题都没有了,哈哈,

如果你写的代码没有问题, 但是编译的时候却出错了, 如果你的错误类似下面:
main.cpp:2:35: qtopia/qpeapplication.h: No such file or directory
main.cpp: In function `int main(int, char**)':
main.cpp:6: `QPEApplication' undeclared (first use this function)
main.cpp:6: (Each undeclared identifier is reported only once for each function
it appears in.)
main.cpp:6: parse error before `(' token
main.cpp:9: `a' undeclared (first use this function)
main.cpp:5: warning: unused parameter `int argc'
main.cpp:5: warning: unused parameter `char**argv'
make: *** [.obj/linux-generic-g++//main.o] Error 1

有开始google,baidu,不是很顺利,但是最终还是给我找到了方法:
回到我的/root/qtopia/qtopia_1.6_install下,
回到我的/root/qtopia/qtopia_1.6_install下,
运行ldconfig,使生成的qt和qtopia库有效,运行一次即可, 而我在前面编译的过程中没有这个过程。

当然,在这之前你应该修改一下你的/etc/ld.so.conf
"为了在PC上模拟运行Qtopia,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt"

在试验一次,问题解决了吗 ?

到这里, 我建议你去编译一下qtopia带的example .路径是qtopia-free-1.6.0/examples/
有 一个application,文件名就叫example
开始编译:
#tmake -o Makefile example.pro
#make

#qvfb &
#./example -qws
怎么样?

好了,我目前只做到这里了,经验还不是很多, 都贴出来了
如果你还有什么问题, 看看这个:http://www.arm9.net/sbc-2410x_howto_qtopia_install.asp 为了大家学习交流贴出这个网址, 如果你打开的是乱码 ,想想办法吧. 呵呵


大家有什么经验.心得,希望可以贴出来分享! 如果上面有什么不对的地方, 请回复告诉我, 谢谢了, 不能让错误的东西误导别人!
[ 此贴被XChinux在2006-05-07 22:39重新编辑 ]
离线coolflowers
只看该作者 1楼 发表于: 2006-05-07
可以放心走了 ,呵呵 !
离线longqm1984

只看该作者 2楼 发表于: 2006-05-08
老大.我也是跟你一样的问题啊,谢谢你啊.呵呵,现在终于找到答案啦
离线shiroki

只看该作者 3楼 发表于: 2006-05-11
赫赫, 这段写得对吗? 很怀疑哦

2下面也许你要自己动手写一个简单的程序, 我是这样, 一厢情愿的以为所有的问题都没有了,哈哈,

如果你写的代码没有问题, 但是编译的时候却出错了, 如果你的错误类似下面:
main.cpp:2:35: qtopia/qpeapplication.h: No such file or directory
main.cpp: In function `int main(int, char**)':
main.cpp:6: `QPEApplication' undeclared (first use this function)
main.cpp:6: (Each undeclared identifier is reported only once for each function
it appears in.)
main.cpp:6: parse error before `(' token
main.cpp:9: `a' undeclared (first use this function)
main.cpp:5: warning: unused parameter `int argc'
main.cpp:5: warning: unused parameter `char**argv'
make: *** [.obj/linux-generic-g++//main.o] Error 1

有开始google,baidu,不是很顺利,但是最终还是给我找到了方法:
回到我的/root/qtopia/qtopia_1.6_install下,
回到我的/root/qtopia/qtopia_1.6_install下,
运行ldconfig,使生成的qt和qtopia库有效,运行一次即可, 而我在前面编译的过程中没有这个过程。

当然,在这之前你应该修改一下你的/etc/ld.so.conf
"为了在PC上模拟运行Qtopia,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt"


ldconfig负责的是运行时的库的查找,好像和你编译时的错误不搭界吧? 你是这么解决的吗?
本来想给你这篇加个精,不过觉得这段有点儿毛病。
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线tangruo
只看该作者 4楼 发表于: 2006-05-12
<b>当然,在这之前你应该修改一下你的/etc/ld.so.conf
"为了在PC上模拟运行Qtopia,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt"


ldconfig负责的是运行时的库的查找,好像和你编译时的错误不搭界吧? 你是这么解决的吗?
本来想给你这篇加个精,不过觉得这段有点儿毛病。<\b>

我想是这样的red hat 8.0本身自带有qt的连接库但是版本比较低,所以楼主把原来在/etc/ld.so.conf中指定的qt连接库该为Qtopia的连接库,然后用ldconfig使其立即生效
离线coolflowers
只看该作者 5楼 发表于: 2006-05-13
呵呵,谢谢楼上两位
又想了想,是有问题的
其实设置环境变量以后, /etc/ld.so.conf就可以不用修改了

呵呵, 我也是在学习中, 如果还有错误请指出,谢谢啊

这几天忙着毕业设计, 没怎么来看
离线coolflowers
只看该作者 6楼 发表于: 2006-05-13
可以把shell文件挂在/root/.bashrc中, source /.../qtopia.shell

不过*.pro文件好象要注意的, 容易出问题, 我是这样的, 每次都自己改pro 文件的
离线coolflowers
只看该作者 7楼 发表于: 2006-05-13
还有, 如果make后没有生成desktop等文件,那么可能Makefile 中没有响应的代码

建议修改一下Makefile(可以从example的makefile 中找到,然后加到你的Makefile中),

那么,make后可以生成desktop等文件,然后将这些文件抛到qtopia相应的目录下(有的可能是自动抛的,不需要手动抛),

这样只要运行qpe就可以运行你的应用了.我想,这相当于将你的应用添加到qpe中

个人经验,有问题请指出!
谢谢
离线coolflowers
只看该作者 8楼 发表于: 2006-05-13
还有, 如果make后没有生成desktop等文件,那么可能Makefile 中没有响应的代码

建议修改一下Makefile(可以从example的makefile 中找到,然后加到你的Makefile中),

那么,make后可以生成desktop等文件,然后将这些文件抛到qtopia相应的目录下(有的可能是自动抛的,不需要手动抛),

这样只要运行qpe就可以运行你的应用了.我想,这相当于将你的应用添加到qpe中

个人经验,有问题请指出!
谢谢
离线looneyxp

只看该作者 9楼 发表于: 2006-05-18
我的错误是
root@edacn:/thesis/qt/qtopia-free-1.7.0/examples/application# make
g++ -o example main.o example.o examplebase.o moc_example.o moc_examplebase.o -L/thesis/qt/qtopia-free-1.7.0/lib -L/thesis/qt/qt-embedded-2.3.7/lib -lm -lqpe -lqtopia -lqte
moc_example.o(.text+0x188): In function `Example::staticMetaObject(void)':
: undefined reference to `QMetaObject::new_metaobject(char const *, char const *, QMetaData *, int, QMetaData *, int, QMetaProperty *, int, QMetaEnum *, int, QClassInfo *, int)'
moc_example.o(.gnu.linkonce.d.__vt_7Example+0x12c): undefined reference to `QWidget::dragEnterEvent(QDragEnterEvent *)'
moc_example.o(.gnu.linkonce.d.__vt_7Example+0x130): undefined reference to `QWidget::dragMoveEvent(QDragMoveEvent *)'
moc_example.o(.gnu.linkonce.d.__vt_7Example+0x134): undefined reference to `QWidget::dragLeaveEvent(QDragLeaveEvent *)'
moc_example.o(.gnu.linkonce.d.__vt_7Example+0x138): undefined reference to `QWidget::dropEvent(QDropEvent *)'
moc_examplebase.o(.text+0xfb): In function `ExampleBase::staticMetaObject(void)':
: undefined reference to `QMetaObject::new_metaobject(char const *, char const *, QMetaData *, int, QMetaData *, int, QMetaProperty *, int, QMetaEnum *, int, QClassInfo *, int)'
moc_examplebase.o(.gnu.linkonce.d.__vt_11ExampleBase+0x12c): undefined reference to `QWidget::dragEnterEvent(QDragEnterEvent *)'
moc_examplebase.o(.gnu.linkonce.d.__vt_11ExampleBase+0x130): undefined reference to `QWidget::dragMoveEvent(QDragMoveEvent *)'
moc_examplebase.o(.gnu.linkonce.d.__vt_11ExampleBase+0x134): undefined reference to `QWidget::dragLeaveEvent(QDragLeaveEvent *)'
moc_examplebase.o(.gnu.linkonce.d.__vt_11ExampleBase+0x138): undefined reference to `QWidget::dropEvent(QDropEvent *)'
collect2: ld returned 1 exit status
make: *** [example] Error 1
离线surpass
只看该作者 10楼 发表于: 2006-05-19
不管怎么样!楼主这份心还是值得鼓励的!我也是正在用友善之臂的SBC-2410X做用户界面的开发,新手一个,好多地方不怎么弄得明白,还真想找个人交流交流,不知楼主可以贴出QQ否!本人QQ:175147448
离线surpass
只看该作者 11楼 发表于: 2006-05-19
我的出错信息如下,大侠帮忙指点一下:(red hat 9.0+qt/embedded2.3.7+qt2.3.2for X11)
[root@surpass root]# cd /friendly-arm/x86-qtopia
[root@surpass x86-qtopia]# ldconfig
[root@surpass x86-qtopia]# . set-env
[root@surpass x86-qtopia]# cd program/
[root@surpass program]# tmake -o Makefile welcome.pro
[root@surpass program]# make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/friendly-arm/x86-qtopia/qt/include -I/friendly-arm/x86-qtopia/qtopia/include -o form0.o
form0.cpp
form0.cpp: In constructor `Form0::Form0(QWidget*, const char*, unsigned int)':
form0.cpp:191: `languageChange' undeclared (first use this function)
form0.cpp:191: (Each undeclared identifier is reported only once for each
  function it appears in.)
form0.cpp:195: `from1' undeclared (first use this function)
form0.cpp: At global scope:
form0.cpp:213: no `void Form0::languageChange()' member function declared in
  class `Form0'
make: *** [form0.o] Error 1
离线ghjmon

只看该作者 12楼 发表于: 2006-05-21
感谢搂主啊,我的问题解决了,但是有个比较疑惑的地方,我编译qtopia里的example能通过,在qvfb里运行也没问题,但是编译自己的程序就报错,按照搂主所说的修改ld.so.conf后执行ldconfig,系统说没有ldconfig这个命令,root也不行,很奇怪,我的系统是red hat 9.0,只好手动修改pro文件,把它链向qtopia之后就可以了,为什么会找不到ldconfig这个命令呢?我是完全安装的呀……
离线wonme

只看该作者 13楼 发表于: 2006-05-26
谢谢楼主和大家! 真是相见恨晚啊 ! 我系统都重装过几次了 哎~
离线shiroki

只看该作者 14楼 发表于: 2006-05-26
ldconfig在/sbin下, 只有root可以调。 你su的时候没有加 - root吧。
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
快速回复
限100 字节
 
上一个 下一个