2

我意识到有很多与这个问题相关的问题,但我无法从我读过的那些中获得头脑或故事。

我正在尝试开始为 Amiga 学习 C,并决定按照本教程进行尝试: 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 编译器和 Shell 中的以下命令:

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

您可能需要包含一个或多个这些附加文件来获取您缺少的函数的原型:

#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 回答