今天交叉编译qte应用程序时,遇到下面的编译链接问题:
/tmp/ccWGP9rp.o:(.rodata._ZTI6QGList[typeinfo for QGList]+0x8): undefined reference to `typeinfo for QCollection'
collect2: ld returned 1 exit status
make: *** [hello_qt] Error 1s
一开始以为是qte库的裁剪导致部分特性功能的缺失造成了,可是找了半天也没有找到和QCollection相关的特性红,而且按照qconfig-dist.h配置编译qte库后,问题依旧。后来检查编译选项,是缺少编译选项-fno-rtti导致的,加上就好了。编译命令参考:
arm-hismall-linux-g++ -ohello_qt hello_qt.cpp -DQWS -pipe -fno-rtti -fno-exceptions
选项简要说明:
- -pipe 使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题
- -fno-rtti 不生成带虚拟函数类的运行时类型识别(Run-Time Type Identification)功能(dynamic_cast and typeid)信息,不使用该功能时,使用该选项可以节省空间。
- -fno-exceptions 关闭异常处理代码的生成,在老的C++代码中没有使用异常处理功能时可以加上该选项
来源:oschina
链接:https://my.oschina.net/u/195885/blog/117491