您的位置:首页 > 运维架构 > Linux

linux 编译选项中加入-shared 造成执行程序coredump

2014-10-18 15:27 302 查看
之前leader分了我个coredump的bug,从客户给的gdb bt中看不到任何有用的信息,也没有core dump文件生成。

$ gdb makepwe.exe

Starting program: /proj/BTESAT2/bin/makepwe.exe

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()
(gdb) bt
#0  0x0000000000000001 in ?? ()
#1  0x00007fffffffbd4b in ?? ()
#2  0x0000000000000000 in ?? ()


自己只能一点一点跟了,但是更奇怪的是他 根本就没有执行到main函数就coredump了。所以感觉不是code的原因,也许是编译选项的问题。所以去找了一下别的客户(linux上的)可以运行成功不coredump的程序:

c catcr  $ARBORBIN/makepwe.exe
Derived object: /usr1/arbor/bin/makepwe.exe@@--05-13T21:29.62576
Target /usr1/arbor/bin/makepwe.exe built by yanl03.clearusr
Host "dcmvrh12" running Linux 2.6.32-279.el6.x86_64 (x86_64)
Reference Time 2014-05-13T20:55:35-06:00, this audit started 2014-05-13T21:29:51-06:00
View was dcmvrh12:/CCSEVIEW/helen.telus.bp12.5_fx2.5_mnt_dcmvrh12
Initial working directory was /usr1/arbor/oam_src/security/applications
----------------------------
MVFS objects:
----------------------------
/usr1/arbor/bin/makepwe.exe@@--05-13T21:29.62576
/usr1/arbor/camb_src/lib/libarbor_utils.so@@--05-13T21:00.35051020
/usr1/arbor/denver_src/make_sys/makefile.arborversion@@/main/13 <2006-07-17T15:08:58-06:00>
/usr1/arbor/oam_src/security/applications/makepwe.o@@--05-13T21:29.54370953
----------------------------
Variables and Options:
----------------------------
ARBORSRC=/usr1/arbor/src
CC_MT=gcc -DARBORBP -Wimplicit-function-declaration  -fPIC -DLINUX  -DBT_UNIX -DBT_LINUX -m64 -DBUILD64BIT -pthread -D_REENTRANT
CFLAGS=-g                        -I/usr1/arbor/src/include
FLAG=
FLG_OBJ=-o
LIBRARIES=-larbor_utils
LIBRARY_DIRS=-L/usr1/arbor/src/lib -L/usr1/arbor/3p/oracle/LINUX/lib -L/usr/ccs/lib -L/usr/lib64 -L/usr/local/lib -L/usr1/arbor/site_specific/lib
MAKE=clearmake -C gnu
MAKEPWE_EXE=/usr1/arbor/bin/makepwe.exe
MAKEPWE_OBJ=makepwe.o
----------------------------
Build Script:
----------------------------
@(rm -f arbor_version.c;  clearmake -C gnu -f /usr1/arbor/src/make_sys/makefile.arborversion)
gcc -DARBORBP -Wimplicit-function-declaration  -fPIC -DLINUX  -DBT_UNIX -DBT_LINUX -m64 -DBUILD64BIT -pthread -D_REENTRANT  -g                        -I/usr1/arbor/src/include   makepwe.o -L/usr1/arbor/src/lib -L/usr1/arbor/3p/oracle/LINUX/lib -L/usr/ccs/lib -L/usr/lib64 -L/usr/local/lib -L/usr1/arbor/site_specific/lib -larbor_utils -o  /usr1/arbor/bin/makepwe.exe
----------------------------


但是coredump的却多了个-shared 的option

gcc -DARBORBP -Wimplicit-function-declaration  -fPIC -DLINUX  -DBT_UNIX -DBT_LINUX -m64 -DBUILD64BIT -pthread -D_REENTRANT  -g                        -I/usr1/arbor/src/include  <span style="background-color: rgb(255, 102, 102);">-shared</span> makepwe.o -L/usr1/arbor/src/lib -L/opt/app/oracle/product/11.2.0.3/lib -L/usr/ccs/lib -L/usr/lib64 -L/usr/local/lib -L/usr1/arbor/site_specific/lib -larbor_utils -o  /usr1/arbor/bin/makepwe.exe


也许有可能是这个编译选项的关系,我在Makefile中去掉这个编译选项后进行编译,果真不coredump了。

[/usr1/arbor/oam_src/security/applications](103)yyang@dcmvrh12#c desc makefile
version "makefile@@/main/rl_fx2.2_addm/rl_bt_ireland_fx2.2_00_ebf/1"
created 2013-09-23T08:07:21-06:00 by Yan Yang (yyang.clearusr@dcmvrh12)
"PR# CBS00153556 Binary makepwe.exe crashes with core dump
CBS00153556"
Element Protection:
User : vobadm   : r--
Group: arboradm : r--
Other:          : r--
element type: text_file
predecessor version: /main/rl_fx2.2_addm/rl_bt_ireland_fx2.2_00_ebf/0
Attributes:
PRNUM = "CBS00153556"
[/usr1/arbor/oam_src/security/applications]                                                                                  (104)yyang@dcmvrh12#diff  makefile@@/main/rl_fx2.2_addm/rl_bt_ireland_fx2.2_00_ebf/1 makefile@@/main/rl_fx2.2_addm/rl_bt_ireland_fx2.2_00_ebf/0
56c56
< CFLAGS = $(DEFAULT_CFLAGS)
---
> CFLAGS = $(DEFAULT_CFLAGS) -shared


-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: