QtEmbedded在MIPS平台编译的一个常见错误

来源:百度文库 编辑:神马文学网 时间:2024/04/30 22:43:06

QtEmbedded在MIPS平台编译的一个常见错误

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:http://www.cuteqt.com/blog/?p=911

错误输出为
libQtWebKit.so: undefined reference to `trunc’
libQtWebKit.so: undefined reference to `lroundf’
libQtWebKit.so: undefined reference to `roundf’
libQtWebKit.so: undefined reference to `lround’

这些函数是定义在Linux下的数学库里的,也就是libm.so或者libm.a。但是有些toolchina在做基本库的时候,并没有把这些函数包括进去,你在Linux Shell命令行下,可以用
$ nm libm.so | grep trunc
或者
$ strings libm.so |grep trunc
查看是否定义了对应的函数。

最直观的解决方法就是重新编译一个带有trunc/roundf这些函数的数学库。也可以造福其它引用libm库的应用或应用框架。

如果你只是编译Qt的话,还有一个解决方法,就是自己去实现这些函数。因为Windows版的数学库就是不带这些函数的,所以Qt的代码里已经自带了这些函数的实现代码。我以QtEmbedded-4.5.2为例,看代码
src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h

105 #if COMPILER(MSVC) || COMPILER(RVCT)106107 inline long lround(double num) { return static_cast(num > 0 ? num + 0.5 : ceil(num - 0.5)); }108 inline long lroundf(float num) { return static_cast(num > 0 ? num + 0.5f : ceilf(num - 0.5f)); }109 inline double round(double num) { return num > 0 ? floor(num + 0.5) : ceil(num - 0.5); }110 inline float roundf(float num) { return num > 0 ? floorf(num + 0.5f) : ceilf(num - 0.5f); }111 inline double trunc(double num) { return num > 0 ? floor(num) : ceil(num); }112113 #endif

上面看到的这段代码只在MSVC的情况下可以编译,我们自然可以自己的宏去控制它是否编译了,这个宏可以在qmake.conf里的QMAKE_CXXFLAGS或者QMAKE_CFLAGS环境变量中添加

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:http://www.cuteqt.com/blog/?p=911