我目前正在尝试更改我的代码的入口点以进行测试。 但是当我改变入口点时,它总是在返回时产生段错误。像
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上构建
你能教我这个错误发生的原因和解决方案吗?