一些注意点
- 今天碰到个超简单的问题,却白花了五个小时时间!!问题原因很简单,一个公用头文件更新了,却只重新编译了部分依赖此头文件的cpp,导致不同模块的同一obj布局不一样。罪魁祸首是没有写全依赖的Makefile,再一个就是,以前用VS编程不可能出现这种问题,只要你包含了头文件,VS自动就帮你建立依赖了。果然太过依靠自动化,基础知识不扎实就会出问题。以前没这种问题的经验,在查找内存越界上浪费了时间,linux各种调试工具都还用不熟悉,真是苦。这种问题的典型现象是:一个指向另一个类的对象指针,刚new出来对其成员变量操作似乎没问题,但一调用其成员函数,就发现指针越界什么的奇怪问题,这时候就要考虑是否是该类重新编译更新了而本模块却没更新。
- Makefile也可以写成类似VC那样的自动头文件依赖。具体可看此文章:自动处理头文件的依赖关系
备忘
- LLVM,CLANG
- 编译参数
-std=c++0x
开启c++11新特性 - 各个编译器对c++11特性的支持情况