2

この問題に関連する多くの質問があることは認識していますが、私が読んだものから頭も物語も作ることができませんでした.

私は Amiga の C の学習を開始しようとしており、このチュートリアルに従って試してみることにしました: http://www.pcguru.plus.com/tutorial/amiga_c.html

この時点に到達すると、私はすでにnoobの問題に遭遇しています:

#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

2 に答える 2

3

欠落している関数のプロトタイプを取得するには、おそらくこれらの追加ファイルを 1 つ以上含める必要があります。

#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 が示唆するように、コンパイラに必要なライブラリがデフォルトで含まれておらず、指定していない場合、リンク エラーが発生する可能性があります。

于 2013-01-24T20:53:19.580 に答える
3

AmigaOS 4.x でプログラムをコンパイルしようとしていると述べていれば、答えは明らかです。OS4 でのライブラリ関数呼び出しには、ライブラリ インターフェイス (IIntuition->LockPubScreen()、IDOS->Delay() など) も含めるか#define __USE_INLINE__、コードの先頭に含める必要があります。

于 2013-01-30T22:15:07.770 に答える