• 7982阅读
  • 7回复

设置好QT/E环境,编译EXAMPLE出错 [复制链接]

上一主题 下一主题
离线戒三
 

只看楼主 倒序阅读 楼主  发表于: 2006-06-01
可能是我上个贴子没说清除配置,今天我把那配置文件贴上,出错信息贴上,希望高手能帮帮.
tar xfvz tmake-1.11.tar.gz
tar xfvz qt-embedded-2.3.7.tar.gz
tar xfvz qtopia-free-1.7.0.tar.gz
tar xfvz qt-x11-2.3.2.tar.gz
mv tmake-1.11 tmake
mv qt-2.3.7/ qt
mv qtopia-free-1.7.0 qtopia
mv qt-2.3.2 qt-x11
cd qt-x11
export QTDIR=$PWD
echo yes | ./configure -static -no-xft -no-opengl -no-sm
make -C src/moc
cp src/moc/moc bin
make -C src
make -C tools/designer
make -C tools/qvfb
cp tools/qvfb/qvfb bin
strip bin/uic bin/moc bin/designer bin/qvfb
cd ..
cp qt-x11/bin/?* qt/bin
rm -fr qt-x11
export QTDIR=$PWD/qt
rm -fr qt-x11
export QTDIR=$PWD/qt
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
cd qt
make clean
cp ../qtopia/src/qt/qconfig-qpe.h src/tools/
(echo yes; echo yes ) |./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32
make -C src
cd ..
cd qtopia/src
./configure -platform linux-generic-g++
make

整个的配置过程就是这样,然后我进QT/examples/hello,make 出现的错误如下:/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `operator new[](unsigned)'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `cos'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `sin'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `__cxa_pure_virtual'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `pow'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `operator delete[](void*)'
collect2: ld returned 1 exit status
好像在哪个贴子上说过只要在Makefile的LIB加上-lm能消除这错误,但是我加上后出现错误如下:
undefined reference to `operator delete(void*)'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `operator new[](unsigned)'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `__cxa_pure_virtual'
/friendly-arm/x86-qtopia/qt/lib/libqte.so: undefined reference to `operator delete[](void*)'
collect2: ld returned 1 exit status
make: *** [hello] Error 1
希望哪位能帮助我,急!在线等!
[ 此贴被XChinux在2006-06-01 19:10重新编辑 ]
离线gloryn

只看该作者 1楼 发表于: 2006-06-01
引用第0楼戒三2006-06-01 11:21发表的“设置好QT/E环境,编译EXAMPLE出错”:
可能是我上个贴子没说清除配置,今天我把那配置文件贴上,出错信息贴上,希望高手能帮帮.
tar xfvz tmake-1.11.tar.gz
tar xfvz qt-embedded-2.3.7.tar.gz
tar xfvz qtopia-free-1.7.0.tar.gz
tar xfvz qt-x11-2.3.2.tar.gz
.......



加-lstdc++??
离线戒三

只看该作者 2楼 发表于: 2006-06-01
在哪加上-lstdc++?
离线shiroki

只看该作者 3楼 发表于: 2006-06-01
最后链接的语句要么把链接器改为g++(你那里写的是gcc吧), 要么在链接的最后加-lstdc++
直接改Makefile最方便
--
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
离线gloryn

只看该作者 4楼 发表于: 2006-06-01
引用第3楼shiroki2006-06-01 13:24发表的“”:
最后链接的语句要么把链接器改为g++(你那里写的是gcc吧), 要么在链接的最后加-lstdc++
直接改Makefile最方便



正好问shiroki一个问题:
  用 -lstdc++ 生成的文件如果编译器的库文件没有动态链接库libstdc++.so,但是有静态链接库libstdc++.a , 那么编译器会自动链接静态链接库吗?还是在运行时再寻找动态库?
离线shiroki

只看该作者 5楼 发表于: 2006-06-01
这个问题我记不太清楚了。 好像是编译的时候会找到.a, 但是还是动态链接的。 所以运行的时候也会去寻找动态库。
等会儿我再看看
--
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
离线gloryn

只看该作者 6楼 发表于: 2006-06-01
引用第5楼shiroki2006-06-01 14:01发表的“”:
这个问题我记不太清楚了。 好像是编译的时候会找到.a, 但是还是动态链接的。 所以运行的时候也会去寻找动态库。
等会儿我再看看


谢谢你的回复。

我曾经看过一篇文章,大致的意思就是说在链接的时候要么全部使用动态链接,要么全部是静态链接,不能够有即有动态链接又有静态链接的情况。

我目前的情况是: 编译器里没有libstdc++.so(目标板上也没有),只有libstdc++.a,在编译QTE及QTopia时都没有选择-static,这样我认为不会静态链接。但我想QTE或QTopia肯定使用了libstdc++库。在目标板上,我可以运行QTEDIR/examples/hello, 这岂不是说明QTE已经将libstdc++静态链接到程序里了(目标板上根本没有libstdc++.so)? 这就让我搞不明白了。

另外我用ldd看了看x86下的QTopia程序qpe,结果如下:
libqtopia2.so.2 =>/TrollTech/qtopia-free-2.1.1-debug/lib/libqtopia2.so.2 0x008d5000)
libqtopia.so.1 => /TrollTech/qtopia-free-2.1.1-debug/lib/libqtopia.so.1 (0x00a88000)
libqpe.so.1 => /TrollTech/qtopia-free-2.1.1-debug/lib/libqpe.so.1 (0x00d7f000)
libqte.so.2 => /TrollTech/qt-embedded-free-2.3.10-debug/lib/libqte.so.2 0x00111000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x007f8000)
libm.so.6 => /lib/tls/libm.so.6 (0x00509000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0052b000)
libc.so.6 => /lib/tls/libc.so.6 (0x00b8b000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x006b7000)
libuuid.so.1 => /lib/libuuid.so.1 (0x0061c000)
libdl.so.2 => /lib/libdl.so.2 (0x00534000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x00583000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00707000)
离线戒三

只看该作者 7楼 发表于: 2006-06-01
谢谢,楼上各位,只要把联接GCC改为G++ 就好了!
快速回复
限100 字节
 
上一个 下一个