更改入口点会导致Segmentation故障。我应该怎么做?

时间:2016-03-08 03:33:04

标签: c++ c linux gcc ld

我目前正在尝试更改我的代码的入口点以进行测试。 但是当我改变入口点时,它总是在返回时产生段错误。像

Hello! -IN func
Segmentation fault (core dumped)

我想将入口点更改为“FuncPrint”,如下所述。

func.c

#include <stdio.h>

int FuncPrint(void)
{
    printf("Hello! -IN func\n");

  return 0;
}

生成文件

.SUFFIXES: .o .c

CFLAGS := -I./
MY_SRC_FILE := $(sort $(subst ./,,$(wildcard *.c)))
MY_NAME := test
LIBGCC := $(shell gcc -print-libgcc-file-name)

LDFLAGS += -dynamic-linker /lib64/ld-linux-x86-64.so.2

#LDFLAGS += /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o
#LDFLAGS += /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o
#LDFLAGS += /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o
#LDFLAGS += /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o
#LDFLAGS += /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o

LDFLAGS += -L/usr/lib/gcc/x86_64-linux-gnu/4.8
LDFLAGS += -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu
LDFLAGS += -L/usr/lib/x86_64-linux-gnu/4.8/../../../../lib
LDFLAGS += -L/usr/lib/x86_64-linux-gnu
LDFLAGS += -L/lib/../lib
LDFLAGS += -L/usr/lib/x86_64-linux-gnu
LDFLAGS += -L/usr/lib/../lib

LDFLAGS += -lgcc --as-needed
LDFLAGS += -lgcc_s --no-as-needed
LDFLAGS += -lc 
LDFLAGS += -lpthread

#Changing entry point.
LDFLAGS += -e FuncPrint  

%.o:%.c
    gcc $(CFLAGS) -c $< -o $@

OBJS := $(patsubst %.c, %.o, $(filter %.c, $(MY_SRC_FILE)))

all:: $(MY_NAME)

clean::
    rm -rf *.o
    rm -rf $(MY_NAME)


$(MY_NAME) : $(OBJS)
    ld $(LDFLAGS) $(LDFLAGS) -o $@ $^ $(LIBGCC)

构建和链接没有任何问题和 似乎入口点设置正确,因为我想要。 但是我不知道为什么Segmentation故障会在它返回时发生。

我正在使用gcc版本4.8.4,ld版本2.24并在Ubuntu 14.04.3 LTS上构建

你能教我这个错误发生的原因和解决方案吗?

0 个答案:

没有答案