Linux指定程序入口

一般来说程序从main函数开始。但实际是main函数并不是必须的。
实际上main函数只是用户代码的入口,它会由系统库去调用
在main函数之前,系统库会做一些初始化工作,比如分配全局变量的内存,初始化堆、线程等。
当main函数执行完后,会通过exit()函数做一些清理工作,用户可以自己实现_start函数:

  • test.c

    #include 
    #include 
    
    int _start() {
    	printf("hello.\n");
    }
    

    编译: gcc test.c -nostartfiles -o app

  • 这样可以输出hello,但是会出错,因为我们这样实际上是覆盖了系统的_start()函数,而系统的_start()开始之前做初始化工作,而结束后会进行回收工作。

  • 那么我们就需要自己进行回收。

    #include 
    #include 
    
    int _start() {
    	printf("hello.\n");
    	exit(0); // exit()函数会结束进程并且回收资源
    }
    
  • 进一步,我们可以指定程序入口,而不使用_start()。

    #include 
    #include 
    
    int aa() {
    	printf("hello.\n");
    	exit(0); // exit()函数会结束进程并且回收资源
    }
    

    编译: gcc test.c -nostartfiles -e aa -o app

你可能感兴趣的:(Linux)