2015-04-05 67 views
0

如何更改我的程序的入口點「主」?更改入口點「主」

#include<stdio.h>  
int main(int argc, char *argv[]) 
{ 
printf("%s\n","Hello world!");  
return 0; 
} 
+0

你是指什麼改變?你想改變什麼?如果你想要另一個入口點,你不能。無論你的程序是什麼,總會有一個'主要功能' – Simon 2015-04-05 21:28:01

+1

[避免主程序(入口點)在C程序中](http://stackoverflow.com/questions/3379190/avoiding-the- main-entry-in-ac-program) – 2015-04-05 21:28:48

+0

只是爲了解編譯器如何生成輸出文件。當然,我的程序使用默認的鏈接器文件。我可以改變它嗎? – 2015-04-05 21:33:31

回答

4
gcc -o entry_test -Wl,-eother entry_test.c 

#include<stdio.h>  

int other(void){//can't use argc, argv 
    printf("Bye-Bye world!\n"); 
    return 0; 
} 

int main(int argc, char *argv[]){ 
    printf("%s\n","Hello world!"); 
    return 0; 
} 
+0

從來沒有聽說過。這實際上工作嗎?我會嘗試! – clearlight 2015-04-05 21:33:22

+0

我只是試圖用gcc在Mac OS X Yosemite上編譯並得到這個錯誤:'gcc -Wl,-other xc ld:unknown option:-other clang:error:linker command failed退出代碼1(使用 - v看到調用)' – clearlight 2015-04-05 21:34:32

+0

接下來,我將嘗試在Linux和Solaris上 – clearlight 2015-04-05 21:35:40

1

如果你正在使用gcc,我發現一個線程,說你可以使用-e命令行參數來指定一個不同的切入點;作爲BLUEPIXY陳述 還看到:

Avoiding the main (entry point) in a C program

- 見下面的鏈接瞭解「-e」選項的詳細信息:

http://gcc.gnu.org/ml/gcc/2001-06/msg01959.html

另一種方式是改變起動功能是在鏈接器「啓動」文件..鏈接器可能包括一些像start.o這樣的文件中的一些主要啓動代碼,並且它是運行以設置C環境然後調用main的代碼片段(如在所有嵌入式工具 - 鏈)。沒有什麼可以阻止你用一些調用另一個函數的東西代替它。

這裏是啓動文件一個很好的解釋:

What is the bootloader and startup code in embedded systems?

我投了這個問題了,因爲它確實可能是一些嵌入式C語言開發人員非常有用。