大项目的版本编译会区别debug和release,那debug和release会有什么区别呢?
通过对比这两者的编译选项可以找到答案。
1.对比编译过程
debug:
-DOS_LINUX -DDEBUG_VERSION -fno-builtin -pipe -Wall -fsigned-char -g
-mlongcall -DCPU=PPC85XX -mcpu=8548 -mstrict-align -fno-defer-pop -DTOR202 -DTOOL_FAMILY=gnu -DTOOL=gnu -DSYS32 -DXOS_TOOLCHAIN_4_1_2
-DSTRUCTURE_ATTR="__attribute__ ((packed))" -DINSTALL_R_CPU=1
release:
-DOS_LINUX -DRELEASE_VERSION -fno-builtin -pipe -Wall -fsigned-char -O2
-mlongcall -DCPU=PPC85XX -mcpu=8548 -mstrict-align -fno-defer-pop -DTOR202 -DTOOL_FAMILY=gnu -DTOOL=gnu -DSYS32 -DXOS_TOOLCHAIN_4_1_2
-fno-strict-aliasing -fno-schedule-insns2 -fno-omit-frame-pointer
注:在使用-O2优化的时候要加上-fno-strict-aliasing -fno-schedule-insns2以防止强制类型转化出问题,加上-fno-omit-frame-pointer是强制使用frame pointer方便调试
对比debug和release编译选项可以发现最大的区别是是用-g选项还是使用-O2选项
2.对比链接过程
在进程链接时,debug和release的链接选项都一致,链接选项如下:
-rdynamic -Wl,--relax,-rpath,/version/lib
注:选项-rdynamic 用来通知链接器将所有符号添加到动态符号表中 (目的是能够通过使用 dlopen 来实现向后跟踪
-Wl选项告诉编译器将后面的参数传递给链接器
--relax,-rpath动态库链接选项
3.所以总的来说,debug和release版本的区别一个是编译.c的编译选项,debug使用了-g选项,release使用了-O2选项
阅读(2603) | 评论(0) | 转发(0) |