如题,桌面FC4,tmake-1.13 , qtx112.3.2 ,qte 2.3.10 ,arm-linux-gcc 3.4.1
qte编译成PC和ARM两个版本。PC版根据qte2.3.10里的安装手册编译,ARM版根据网友断水刀的方法编译(见附录二)。同样出现下面的错误,
问题一:请问大家这是什么原因?会对生成的库有影响吗?
我使用附录一所示的小程序进行测试,在QVFB运行正确,在ARM版的qte上编译也正常。可是把程序传到开发板上运行出现segmentation fault。我是把ARM版qte下生成的lib和arm的库文件发到我的文件系统中。运行程序前指定export LD_LIBRARY_PATH=/lib;(开发板上库文件)。我第一次移植qte,希望大家指点一下,是否我还需要在文件系统中加入什么东东?谢谢
附录:
一 小程序
#include <qapplication.h>
#include <qlabel.h>
int main(int argc, char **argv)
{
QApplication app (argc, argv);
QLabel *hello = new QLabel("<h2><fontcolor=blue>Hello<i>Qt/Embedded!</i> </font> </h2>", 0);
app.setMainWidget(hello);
hello->show();
return app.exec();
}
二 Qt/E 的交叉编译
要将我们写好的程序发布到开发板上,我们需要对Qt/Embedded 重新编译,与前面在宿主机上编译类似,步骤如下:
1. Build Qt/Embedded
tar –xzvf qt-embedded-2.3.10-free.tar.gz
mv qt-2.3.10 qt-2.3.10-target
export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10-target
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make
出现
/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new[](unsigned int)'
/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete(void*)'
/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `__cxa_pure_virtual'
/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete[](void*)'
/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new(unsigned int)'
collect2: ld returned 1 exit status
make[4]: *** [t1]
暂时不管它,不影响的。下面的第2步: “修改tmake 配置文件” 即可解决此类问题。
这步完成后,我们会在/$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.10 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。
file libqte.so.2.3.10
libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped