大項目的版本編譯會區別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選項
閱讀(1514) | 評論(0) | 轉發(0) |