• 6059阅读
  • 0回复

Hello world 程序通过交叉编译,但在板子上运行时出错 [复制链接]

上一主题 下一主题
离线howewe
 
只看楼主 正序阅读 楼主  发表于: 2007-07-20
— 本帖被 XChinux 从 Qt Programming 移动到本区(2008-07-18) —
各位大侠,我用qt designer 编写的Hello world 程序通过交叉编译,但在板子上运行时出错,具体情况如下:

交叉编译工具:arm-linux-2.95.3,安装在/usr/local/arm/2.95.3下

在/usr/local/src/edukit-2410/gui/qt下安装并编译了e2fsprogs-1.35,jpeg-6b,qt-2.3.2,qt-2.3.7,qtopia-free-1.7.0,tmake-1.11,tslib

我曾经根据QT参考文档所述,通过些代码的方式,编写过一个hello world,编译后在主机和目标板上(NFS方式)均可运行,我想这说明我的交叉编译环境和运行环境应该没错。

现在我尝试用qt designer(FC6自带的qt3.3)编写hello world,界面上仅包含一个TextLabel,保存为helloqt.ui,由qt自动生成主函数main.cpp,用uic由helloqt.ui生成helloqt.h和helloqt.cpp,把他们添加入工程,故hello.pro中含有main.cpp,helloqt.h,helloqt.cpp,helloqt.ui四个文件

设置环境变量,经编译,能生成主机上的可执行文件,并运行正常。

然后,改变环境变量后,设置交叉编译的环境变量如下:
export QTDIR=/usr/local/src/edukit-2410/gui/qt/qt-2.3.7
export QPEDIR=/usr/local/src/edukit-2410/gui/qt/qtopia-free-1.7.0
export TMAKEDIR=/usr/local/src/edukit-2410/gui/qt/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export PATH=$QTDIR/bin:$TMAKEDIR/bin:$QPEDIR/bin:/usr/local/arm/2.95.3/bin:$PATH

经编译,能生成目标机上的可执行文件,但是用NFS方式把nfsroot(/s3c2410/root)挂载到目标板上(S3C2410)
开发板中的环境变量设置如下:
~ # export QTDIR=/qt
~ # export QPEDIR=/qt
~ # export PATH=/qt/bin:$PATH
~ # export LD_LIBRARY_PATH=/qt/lib:$LD_LIBRARY_PATH

运行出错:
~ # helloqt -qws
helloqt: error in loading shared libraries: helloqt: undefined symbol: new_metaobject__11QMetaObjectPCcT1P9QMetaDataiT3iP13QMetaPropertyiP9QMei


我估计是交叉编译环境的库和目标板中的库不一致,目标板中的root是开发板厂商提供给我的,未曾修改,因此尝试:

把$QTDIR/lib中的libqte.so等四个文件复制并复盖板子中s3c2410pro/root/qt/lib中的同名文件

把$WORKDIR/qtopia-free-1.7.0/lib中的libqpe.so等四个文件复制并复盖板子中s3c2410pro/root/qt/lib中的同名文件

这时运行
~ # helloqt -qws
helloqt: /lib/libc.so.6: version `GLIBC_2.2' not found (required by /qt/lib/libqpe.so.1)
helloqt: /lib/libc.so.6: version `GLIBC_2.2' not found (required by /qt/lib/libqte.so.2)


经查,交叉编译链usr/arm-linux/lib中的的libc-2.2.3.so而目标板中的s3c2410/root/lib中为libc-2.1.3.so,这可能是问题所在,
因此尝试把目标板中的也替换为libc-2.2.3.so(交叉编译链中的libc-2.2.3.so和libc.so.6复制到目标板中)

~ # helloqt -qws
helloqt: /lib/ld-linux.so.2: version `GLIBC_2.2.3' not found (required by /lib/libc.so.6)
helloqt: /lib/ld-linux.so.2: version `GLIBC_2.2' not found (required by /lib/libc.so.6)

经查,交叉编译中ld-linux.so.2链接的是ld-2.2.3.so,而目标板中链接的是ld-2.1.3.so,所以也把板子中ld-2.1.3.so换为ld-2.2.3.so

~ # helloqt -qws
helloqt: error while loading shared libraries: cannot open shared object file: cannot load shared object file: No such file or directory

至此,自己搞了很久问题仍未解决,请教各位路过的大侠
[ 此贴被XChinux在2008-07-18 12:03重新编辑 ]
快速回复
限100 字节
 
上一个 下一个