2010-05-22 50 views
4

?我怎樣才能從C程序彙編代碼我用這個recommendation 我用這樣的-c -fmessage-length=0 -O2 -S在Eclipse,但我有一個錯誤,在此先感謝您的幫助從C到裝配

現在我有這樣的錯誤

atam.c:11: error: conflicting types for 'select' 
/usr/include/sys/select.h:112: error: previous declaration of 'select' was here 
atam.c:11: error: conflicting types for 'select' 
/usr/include/sys/select.h:112: error: previous declaration of 'select' was here 

這是我的功能

int select(int board[],int length,int search){ 
    int left=0, right=length-1; 

    while(1){ 
     int pivot_index=(right+left)/2; 
     int ordered_pivot=partition(board,left,right,pivot_index); 

     if(ordered_pivot==search){ 
      return board[ordered_pivot]; 
     } 
     else if(search<ordered_pivot){ 
      right=ordered_pivot-1; 
     } 
     else{ 
      left=ordered_pivot+1; 
     } 
    } 
} 
+2

Eclipse不是C編譯器,但我猜你正在使用GCC作爲後端,所以'-S'應該足夠了 – 2010-05-22 21:37:29

回答

5

Eclipse是仍然把輸出的目標文件

gcc -O0 -g3 -Wall -c -fmessage-length=0 -O2 -S -oatam.o ..\atam.c 

正在生成組件就像你想要的,但它混淆的存儲atam.o因爲-oatam.o傳遞給GCC(通常你會組裝存儲在atam.s)的。下一個命令:

gcc -oatam.exe atam.o 

嘗試鏈接atam.o並生成一個可執行文件,但atam.o是彙編源,而不是對象文件,所以接頭失敗。您需要告訴eclipse不要運行第二個命令(並且您可能想要更改第一個命令的輸出文件名)

+0

對不起,但我究竟輸入了什麼? – lego69 2010-05-22 21:43:36

+0

@lego'gcc -S .. \ atam.c'是你絕對需要的;這將生成一個名爲'atam.s'的程序集文件。 – 2010-05-22 21:55:10

1

-S指示編譯器不通過實際的編譯和鏈接步驟並在發出程序集後停止。另一方面,你也告訴編譯器在同一行上編譯你的文件(除了其他衝突的設置)。

試試這個:

gcc -O0 -S ../atam.c 

優化將彙編文件生成遠離你的源代碼,所以我指示GCC關閉優化。也不要運行鏈接器。

+0

我不工作:( – lego69 2010-05-22 21:47:14

+1

「它不工作」從來沒有幫助。從命令行運行時出現什麼錯誤? – Blindy 2010-05-22 21:49:11

2

發生錯誤是因爲select是一個Unix系統調用,並且您的定義與相關係統頭中的聲明發生衝突。你需要重新命名你的功能。

+0

謝謝,最後我做了 – lego69 2010-05-22 22:18:11

+0

直到我看了修訂歷史記錄之前,我完全搞不清楚你在說什麼;他顯然編輯了這個問題,說出與原始問題完全不同的內容,然後在回答完後再次編輯以取出大部分信息,包括所有對'select()'的引用。我將它回滾,因爲這似乎是他正在尋找的答案 – 2010-05-22 23:29:10