C 用特殊函数_init和_fini分割故障

C 用特殊函数_init和_fini分割故障,c,gcc,compilation,init,C,Gcc,Compilation,Init,出于观察的目的,我使用_start(),_init(),_fini()编写了一个程序,目标是不使用startfiles。 代码如下 #include <stdio.h> void test() { printf("\n%s: \n",__func__); printf("library test routine invoked\n"); int a=3,b=2; int sum=a+b; printf("sum=%d\n",sum); getchar(); _fini(); } i

出于观察的目的,我使用_start(),_init(),_fini()编写了一个程序,目标是不使用startfiles。 代码如下

#include <stdio.h>
void test()
{
printf("\n%s: \n",__func__);
printf("library test routine invoked\n");
int a=3,b=2;
int sum=a+b;
printf("sum=%d\n",sum);
getchar();
_fini();
}

int _start()
{
printf("\n%s: \n",__func__);
printf("in library start routine\n");
test();
return 0;
}
int _init()
{
printf("\n%s: \n",__func__);
printf("in library init routine\n");
return 0;
}

int _fini()
{
printf("\n%s: \n",__func__);
printf("in library fini routine\n");
return 0;
}
这里我想知道为什么可执行文件会出现分段错误??我是否需要指定,因为这是程序的结束??如果是,如何?? 如何克服分割错误?? 另一个问题是这些_start(),_init(),_fini()仅在处理库时使用???

启动例程无法返回。通常,它调用
\uu libc\u start\u main
,后者调用
main
。然后当
main
返回时,
调用
exit
,返回值为
main

由于您自己定义
\u start
而不是调用
\u libc\u start\u main
,因此需要显式调用
exit
。您将获得sigfault,因为该函数不应返回

有关更多详细信息,请参阅

_start: 
in library start routine

test: 
library test routine invoked
sum=5
l

_fini: 
in library fini routine
Segmentation fault (core dumped)