我意识到有很多与这个问题有关的问题,但我无法从我读过的那些问题中找到头脑或故事。
我正在尝试为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编译器和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的第一次尝试,所以我想我错过了一些明显的东西。
答案 0 :(得分: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建议的那样,如果您的编译器默认情况下不包含必需的库,并且您没有指定它,则可能会遇到链接错误。
答案 1 :(得分:3)
如果您曾提到过您尝试在AmigaOS 4.x下编译该程序,答案显而易见。 OS4中的库函数调用也必须包含库接口 - IIntuition-&gt; LockPubScreen(),IDOS-&gt; Delay()等 - 或者您必须在代码开头#define __USE_INLINE__
。