2013-01-24 47 views
2

我意識到有很多與這個問題有關的問題,但是我無法從我讀過的那些頭腦和故事中找出答案。警告:賦值使得整型指針沒有一個變量undefined

我想開始學習C爲Amiga,決定試試下面這個教程: http://www.pcguru.plus.com/tutorial/amiga_c.html

在到達這一點,我已經運行到小白的問題:

#include <proto/intuition.h> 
#include <intuition/screens.h> 
#include <proto/dos.h> 
#include <stdio.h> 
int main(void) { 

    struct Screen *myScreen; 
    if (myScreen = LockPubScreen(NULL)) { 
     printf("Public Screen locked.\n"); 
     Delay(100); 
     UnlockPubScreen(NULL, myScreen); 
     printf("Public Screen unlocked.\n"); 
    } 
    return 0; 
} 

我使用GCC編譯器,從殼體下面的命令:

gcc -o LockPubScreen LockPubScreen.c 

這將返回以下:

Warning: assignment makes pointer from integer without a cast 
undefined reference to 'LockPubScreen' 
undefined reference to 'Delay' 
undefined reference to 'UnlockPubScreen 

除了'HelloWorld'這是第一次嘗試C或編程Amiga,所以我想我錯過了一些明顯的東西。

+4

通過你錯過了LockPubScreen()的正確'#include'(可能還有其他兩個)的東西,而且也沒有鏈接到定義它們的庫。 – NPE

回答

3

你可能需要包括這些附加文件的一個或多個獲得原型你缺少的功能:

#include <intuition/gadgetclass.h> 
#include <intuition/IntuitionBase.h> 
#include <libraries/gadtools.h> 
#include <clib/exec_protos.h> 
#include <clib/intuition_protos.h> 
#include <clib/gadtools_protos.h> 

然後,NPE建議,如果你的編譯器可能會遇到鏈接錯誤在默認情況下不包括必需的庫,並且您沒有指定它。

+0

感謝您的幫助。原來我不得不添加'#define __USE_INLINE__'和'struct IntuitionIFace * IIntuition;'。還必須在編譯器命令中添加'-lauto'。 – Robert

+0

@羅伯特 - 很高興你解決了這個問題。如果我的「答案」有幫助,我很高興你選中了它。如果沒有,那麼請發佈什麼解決你的問題作爲一個單獨的答案,並選擇你自己的答案。你不會得到任何選擇你自己的答案的要點,但如果我的帖子沒有幫助,那麼選擇它是有點不妥。 – phonetagger

+0

你的回答確實有幫助。你說得對,它沒有解決它,但這是一個重要的步驟。 =) – Robert

3

如果你曾經提到過你試圖在AmigaOS 4.x下編譯這個程序,答案會很明顯。 OS4中的庫函數調用也必須包含庫接口 - IIntuition-> LockPubScreen(),IDOS-> Delay()等等,或者您必須在代碼開頭爲#define __USE_INLINE__

+0

是的,我意識到現在,但我不知道當我發佈這個問題時會有什麼不同。感謝您的意見;我只是開始涉足Amiga編程。 – Robert

相關問題