较大型cpp项目的代码组织、编译都是深耦合的。
一般提供一个总体的makefile,进入各个模块,又有自己的makefile,这些makefile又都依赖于一些被include的文件的的定义,为什么要这样原因不必多言。
但要想改变编译环境时,却很难顺利的移植。我们可能踩过的坑有:
1)找不到类库,这个还比较好处理,绝对是你指定的目录问题,甚至是当前目录——一个小圆点不要疏忽了
2)依赖库不匹配,比如glibc、i686、x86_64等,只管去匹配好了
3)还是找不到定义: 注意调整依赖的顺序,一般越是通用、没有耦合的库要尽可能放在后面,让前面找不到定义的库有机会去查找,还有就是双向关联的类——做好声明。
如何定位一些原因,必须学会如下命令:
ldd -r
strings | grep ...
file 或者 objdump -a
makefile中对操作系统的判断:
ARCH = $(shell getconf LONG_BIT)
uname -m
ifeq ($(OS_TYPE), x86_64) LIB_EPOLL =
else LIB_EPOLL = -lepoll
endif
待续
原文:http://www.cnblogs.com/leby/p/4905920.html