• 9373阅读
  • 5回复

嵌入式QT编译问题求助:undefined reference to `sinf' [复制链接]

上一主题 下一主题
离线reback
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-24
编译环境:
系统:Linux localhost.localdomain 2.6.25-14.fc9.i686 #1 SMP Thu May 1 06:28:41 EDT 2008 i686 i686 i386 GNU/Linux
QT版本:qt-embedded-linux-opensource-src-4.5.2
交叉编译工具链:
1、gcc-3.3.5-openwrt.tar.bz2
2、gcc.3.4.4-broadcom-mipsel.tar.bz2
3、toolchains.x86.debian.sp1.tar.bz2
    以上三种均试过,效果相同。。。
编译步骤:
1、解压工具链
2、解压qt-embedded
3、修改qt-embedded目录下/mkspecs/qws/linux-mips-g++/qmake.conf 将其中的gcc、g++改为工具链提供的名字。
4、将工具链的bin目录加入到PATH中。
5、进入qt-embedded目录,开始configure
6、./configure -prefix /usr/local/Trolltech/qt-embedded-mips -release -static -no-qt3support -no-xmlpatterns -no-svg -no-webkit -qt-zlib -no-gif -no-libtiff -qt-libpng -no-libmng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-mips-g++ -embedded mips -little-endian -qt-freetype -no-glib
7、configure顺利完成,make.....
8、make顺利完成,make install...
9、export PATH=/usr/local/Trolltech/qt-embedded-mips/bin:$PATH
10、进入自己写的程序目录,代码如下:
#include <QtCore/QCoreApplication>

int main(int argc, char *argv[])
{
        QCoreApplication a(argc, argv);

        return 0;
}
11、开始编译
[root@localhost tt2]# qmake -project
[root@localhost tt2]# qmake
[root@localhost tt2]# make
mipsel-linux-g++ -c -pipe -mips32 -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I/usr/local/Trolltech/qt-embedded-mips/mkspecs/qws/linux-mips-g++ -I. -I/usr/local/Trolltech/qt-embedded-mips/include/QtCore -I/usr/local/Trolltech/qt-embedded-mips/include/QtNetwork -I/usr/local/Trolltech/qt-embedded-mips/include/QtGui -I/usr/local/Trolltech/qt-embedded-mips/include -I. -I. -I/opt/openwrt/include -o main.o main.cpp
mipsel-linux-g++ -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/qt-embedded-mips/lib -o tt2 main.o    -L/opt/openwrt/lib -L/usr/local/Trolltech/qt-embedded-mips/lib -lQtGui -L/usr/local/Trolltech/qt-embedded-mips/lib -L/opt/openwrt/lib -lQtNetwork -lQtCore -lm -lrt -ldl -lpthread
/usr/local/Trolltech/qt-embedded-mips/lib/libQtCore.a(qline.o)(.text+0xc68): In function `QLineF::setAngle(float)':
qline.cpp: undefined reference to `cosf'
/usr/local/Trolltech/qt-embedded-mips/lib/libQtCore.a(qline.o)(.text+0xc80):qline.cpp: undefined reference to `sinf'
/usr/local/Trolltech/qt-embedded-mips/lib/libQtCore.a(qline.o)(.text+0xcfc): In function `QLineF::fromPolar(float, float)':
qline.cpp: undefined reference to `cosf'
/usr/local/Trolltech/qt-embedded-mips/lib/libQtCore.a(qline.o)(.text+0xd38):qline.cpp: undefined reference to `sinf'
collect2: ld returned 1 exit status
make: *** [tt2] Error 1
[root@localhost tt2]#
很奇怪啊,明明加了 -lm的啊?经检查qline.cpp里面包含了qmath.h里面调用过cosf
查看工具链的LIB目录下的libm.a
[root@localhost lib]# grep 'cosf' libm.a
Binary file libm.a matches
说明有cosf这个函数啊?奇怪。。。。
12、改qt源代码,所有cosf、sinf,只要带“f”的全删掉“f”.....
13、删除qt源码,以及/usr/local/Trolltech/qt-embedded-mips 目录,重新解压,编译。。。
14、结果相同.......@_@#....
[root@localhost include]# pwd
/opt/openwrt/include
[root@localhost include]# grep -rn --color 'cosf' .
./c++/3.4.4/cmath:103:  { return __builtin_acosf(__x); }
./c++/3.4.4/cmath:181:  { return __builtin_cosf(__x); }
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:211:// Define if the compiler/host combination has __builtin_cosf
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:269:/* Define to 1 if you have the `acosf' function. */
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:311:/* Define to 1 if you have the `cosf' function. */
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:554:/* Define to 1 if you have the `sincosf' function. */
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:767:/* Define to 1 if you have the `_acosf' function. */
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:803:/* Define to 1 if you have the `_cosf' function. */
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:920:/* Define to 1 if you have the `_sincosf' function. */
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:1034:# define cosf _cosf
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:1039:# define acosf _acosf
./c++/3.4.4/mipsel-linux-uclibc/bits/c++config.h:1259:# define sincosf _sincosf
Binary file ./c++/3.4.4/mipsel-linux-uclibc/bits/stdc++.h.gch/O2g matches
Binary file ./c++/3.4.4/mipsel-linux-uclibc/bits/stdc++.h.gch/O0g matches

[root@localhost floatmath]# ls /home/qt-embedded-mips/config.tests/unix/floatmath
floatmath.cpp  floatmath.o  floatmath.pro  Makefile

有floatmath.o,是不是代表通过浮点测试了呢?
几天了。。。这问题始终解决不了。。。。郁闷。。。
对了,动态链接,我也试过了,问题依旧。。。。
离线reback
只看该作者 1楼 发表于: 2009-10-26
没有人遇到过吗?
离线reback
只看该作者 2楼 发表于: 2009-10-27
还是没人回答?
离线reback
只看该作者 3楼 发表于: 2009-11-02
依然没解决,继续顶,直到有人答复...
离线rqzrqh

只看该作者 4楼 发表于: 2009-11-02
会不会是你的编译参数中缺少math这种参数?
离线reback
只看该作者 5楼 发表于: 2009-11-06
mipsel-linux-g++ -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/qt-embedded-mips/lib -o tt2 main.o    -L/opt/openwrt/lib -L/usr/local/Trolltech/qt-embedded-mips/lib -lQtGui -L/usr/local/Trolltech/qt-embedded-mips/lib -L/opt/openwrt/lib -lQtNetwork -lQtCore -lm -lrt -ldl -lpthread

QT自动生成的MakeFile里面有 -lm了啊
快速回复
限100 字节
 
上一个 下一个