QTCreator & QT & gcc问题合集(一)
来源:互联网 发布:qq登录代理服务器 mac 编辑:程序博客网 时间:2024/06/04 23:34
1、linker input file unused because linking not done
这是今天做工程时遇到的一个警告。
我编译了一个静态库libjason.a,然后把这个静态库文件和它的头文件jason.h加入到工程目录中。然后,把工程的Makefile文件删除,重新打开QTCreator,在它自动成的Makefile文件的LIBS里面加入libjason.a静态库(形如: -L ./ -ljason),然后编译,便出现上文提示的信息。
这个问题的原因是由两个方面造成的(根据工程的具体环境),首先要搞清楚预处理,编译,链接的作用和之间的关系,再一个就是QTCreator生产Makefile的时候,默认直接把libjason.a加入到了INCPATH路径里边,这样就造成了没有连接就直接使用,导致最终的警告。
解决过程:把INCPATH里的libjason.a删除即可编译成功。
参考文献:
同上问题的另一篇讨论 http://gcc.gnu.org/ml/gcc-help/1999-12n/msg00351.html
解析QT静态库和动态库 http://mobile.51cto.com/symbian-267846.htm
编译与连接的知识 http://blog.chinaunix.net/uid-25808509-id-2743842.html
2、在linux中使用动态共享库,分别为a.so和b.so两个库,其中b.so由a.so调用,a.so由主工程调用。编译都通过,但运行程序时出现如下错误提示:
……symbol lookup error:…….so.1: undefined symbol: _ZN11.....QString
类如下图所示:
初始还以为是我的动态库编写有问题,但仔细查看了几遍,没有什么问题呀,编译也都通过,先编译成功b.so动态库,然后在由a动态库工程调用b.so文件,最终生成的a.so动态库文件。为了省去库文件路径配置的麻烦,我直接放到了/usr/lib里边。但出现问题是,也重新审视了LD_LIBRARY_PATH。但都没问题呀。网上都翻遍了,出现类似问题的很多,但都没能解决我的问题。
再仔细看看问题,最后的那一串 _ZN11VideoDeviceC1E7QString 提示很重要,肯定问题出现在相关VideoDevice(即上面的b.so)的文件里边。仔细查看了a动态库工程的Makefile文件,再查看了主工程的Makefile文件,最终发现问题,也解决了问题。问题表现如下(仔细对比两个文件的差异)
a的Makefile文件:
主工程文件Makefile的写法:
这两种写法不一样,导致在主工程文件生成的可执行文件运行时无法链接到具体的动态库文件。
所以编程习惯和编程规范相当重要,一不留神那就是浪费生命了。
解决问题:把a动态库工程中的Makefile文件里的“ libvideodevice” 修改为 “ -lvideodevice” 即可,然后重新编译生成a.so动态库文件,再放到主工程离去。
参考文献:http://bbs.chinaunix.net/thread-1616529-1-1.html
3、编译错误:undefined reference to `vtable for
原因一,只声明而没有定义析构函数;
原因二,由于在该类中使用了Q_OBJECT宏的缘故;
参考文献一:http://1108038.blog.51cto.com/1098038/409968
参考文献二:http://blog.csdn.net/yili_xie/article/details/4803482
- QTCreator & QT & gcc问题合集(一)
- QTCreator & QT & gcc问题合集(一)
- QT Creator 问题合集
- 问题合集 ---- Linux命令(一) sar
- Python 练手程序合集(一)
- 【codevs】基础合集(一)
- QtCreator模型与视图总结(一)
- 用友打印问题合集 一【各模块】
- Qt and QtCreator
- qt+2012+qtcreator 配置
- qt qtcreator vs2010
- qt mingw 编译qtcreator
- iOS问题合集(不定期更新)
- 菜鸟问题合集(机器学习)
- mongoDB问题合集(持续更新)
- js问题合集
- session问题合集
- 小问题合集
- Uboot启动过程详解
- SOA On Tomcat专题6--Log
- maven3实战之设置HTTP代理
- poj-1077-Eight
- 电平触发和边沿触发的不同
- QTCreator & QT & gcc问题合集(一)
- 读书摘录之《重构-改善既有代码的设计》简要摘录
- left join 和 left outer join 的区别
- 华为面试经历 by eric
- 学习随记-Toast提示,两个Activity之间传递数据
- Log4J基础详解及示例大全
- 孵出鸡蛋然后拿去卖钱
- TabHost的学习!
- 二分图最大匹配