首页| 论坛| 消息

标题:开贴整理常见编译错误集锦 -- 不断更新中
作者:shiroki
日期:2006-10-29 22:20
内容:

看到大家为了编译搞得这么痛苦, 实在于心不忍. 决定开篇整理在编译过程中遇到的问题. 大家有什么新问题也可申请加到本贴中.

cannot find -lqte
这个问题比较复杂, 需要从几个方面来分析. 首先要看编译的命令行, 在编译的命令行里应该正确的指定libqte.so所在的路径. 用tmake生成的makefile里, 该路径会引用QTDIR/lib, 如果报该错, 则是QTDIR环境变量设定有误; 另外, tmake引用TMAKEDIR和TMAKEPATH变量。 TMAKEDIR设定tmake目录的路径, TMAKEPATH设定你使用的tmakespec位置, 当编译qt-x11程序时设为TMAKEPATH=$TMAKEDIR/lib/linux-g++, 编译qte程序时设为TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
qmake则依据QMAKESPEC环境变量的值生成makefile, 对应qte/qtopia应用需要将QMAKESPEC设定为QPEDIR/mkspecs/qws/linux-generic-g++
该问题的解决方案就是设置好相应的环境变量, 重新用tmake或者qmake去生成Makefile, 然后编译. 肯定能行, 呵呵
uuid/uuid.h
桌面环境需要安装e2fsprogs的开发包(-devel包), 如果是交叉编译环境, 则需要找到源码包进行交叉编译. 装好开发包再make即可.
jpeg.h
需要安装libjpeg的开发包或用源码包交叉编译, 网上搜jpegsrc即可找到
cups/cups.h
安装 cups-devel*.rpm包
GL/glu.h
安装 mesa-libGLU-devel*.rpm包
undefined reference xxx
这是个链接错误,意思是说在你的程序里引用了某个函数或变量, 但是链接器找不到该变量的定义.
最容易出现此错误的情况是, 你的头文件和库文件不匹配. 比如你用了x11版本的头文件, 而链接到嵌入式版本的qt;或者有头文件但找不到库文件等. 具体问题具体分析.
如果报的符号是在某个第三方库里的, 比如uuid的什么什么函数, 则要检查你的libqte是不是编译得正确. 本来这些库应该正确链接到libqte.so上, 这样在qtopia链接的时候就不需要显式的加上这些库了. 有的时候libqte没有正确链接好, 但是在编译libqte阶段不会报错, 到后面qtopia或者其他应用编译的时候就出错了.
解决方案是把报错的库删除, 重新编译库. 如果是libqte, 要把你环境里的出现libqte的地方都检查检查, 有可能存在不同的libqte互相影响.


#1 [wicoo401 11-16 17:25]
TO: cannot find -lqte
变量QTDIR指向QTE对吗?
QTDIR=$TROLLTECHDIR/qt-embedded-free-2.3.10-debug
我是这么做的export QTDIR=$HOME/Trolltech/qt-embedded-free-2.3.10-debug
结果出现如下错误
..........
/root/Trolltech/qt-embedded-free-2.3.10-debug/lib/libqte.so: undefined reference
to `QComboBox::setAutoCompletion(bool)'
/root/Trolltech/qt-embedded-free-2.3.10-debug/lib/libqte.so: undefined reference
to `QComboBox::setEditText(QString const&)'
/root/Trolltech/qt-embedded-free-2.3.10-debug/lib/libqte.so: undefined reference
to `QMotifStyle::drawIndicator(QPainter*, int, int, int, int, QColorGroup const
&, int, bool, bool)'
collect2: ld returned 1 exit status
make: *** Error 1
是libqte.so没装好吗?
#2 [shiroki 11-16 18:18]
undefined reference的问题我的帖子里也提到了, 恩, 建议你把lib下的libqte*删掉, 然后
cd qtedir
export QTDIR=$PWD
make
把libqte再生成一遍看看
#3 [jinliang516 11-17 15:40]
No rule to make target `all', needed by `default'
我编译qpe的 时候遇到的 ,
qte已经编译好了,qconfig-qpe.h也考过去了,
在qpe 的src下make的 时候出现,是在qtopia-free-1.7.0/src/libraries/qtopia下面
有点莫明奇妙,板主救人!!!
#4 [wicoo401 11-17 15:45]
再详细问一下编译qvfb时变量QTDIR=$DTEDIR 还是 QTDIR=$QT2DIR
解决编译qvfb时出现cannot find -lqte问题时将TMAKEPATH改为TMAKEPATH=/root/Trolltech/tmake-1.13/lib/linux-g++吗?
随后出现了undefined reference还有什么解决办法(重新生成libqte不管用阿)
export QTDIR=$QT2DIR后出现的undefined reference
moc_config.o(.gnu.linkonce.d._ZTV6Config+0x1c4): undefined reference to `non-virtual thunk to QWidget::bytesPerLine() const'
moc_config.o(.gnu.linkonce.d._ZTV6Config+0x1c8): undefined reference to `non-virtual thunk to QWidget::graphicsContext(bool) const'
collect2: ld returned 1 exit status
#5 [shiroki 11-18 21:20]
qvfb是x11应用, 所以qtdir要设成qt-x11-2 dir
另外qtdir和tmakepath要互相配合
设好tmakepath之后要用tmake重新生成makefile
最后make clean;make
你这个应该是没有重新生成makefile

<< 1 2 3 >> (1/10)

回复 发表
主题 版块