Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173174
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 09:10
文章分类
文章存档

2016年(43)

我的朋友

分类: 嵌入式

2016-05-25 17:56:22

    大项目的版本编译会区别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选项










阅读(2559) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~