用Derelict和SDL进行D编程

时间:2011-11-21 08:12:19

标签: sdl d

您好我最近通过查看Derelict2分支here来下载Derelict2 我用SDL尝试了一个小程序:

import derelict.sdl.sdl;

int main()
{
  bool run = true;
  SDL_Init(SDL_INIT_VIDEO);
  SDL_SetVideoMode(400, 300, 32, SDL_HWSURFACE | SDL_RESIZABLE | SDL_DOUBLEBUF);
  SDL_Event event;
  while(run)
  {
    SDL_WaitEvent(&event);
    switch(event.type)
    {
      case SDL_QUIT:
      run = false;
    } 
  }
  return 0;
}

我用这个命令行编译:

ldc2 -I=/usr/include/d/Derectlict2/DerelictSDL -I=/usr/include/d/Derectlict2/DerelictUtil -of=../bin/test -release -run main.d

但是有这个错误:

../bin/test.o: In function `_Dmain':
main:(.text+0x40): undefined reference to `_D8derelict3sdl8sdlfuncs8SDL_InitPUkZi'
main:(.text+0x69): undefined reference to `_D8derelict3sdl8sdlfuncs16SDL_SetVideoModePUiiikZPS8derelict3sdl8sdltypes11SDL_Surface'
main:(.text+0xa2): undefined reference to `_D8derelict3sdl8sdlfuncs13SDL_WaitEventPUPS8derelict3sdl8sdltypes9SDL_EventZi'
../bin/test.o:(.rodata+0x2c): undefined reference to `_D8derelict3sdl3sdl8__ModuleZ'
collect2: ld returned 1 exit status
Error: linking failed:
status: 1

我是D中的初学者和一般的编程,我不明白目标文件是什么。

所以如果有人理解我做错了,请告诉我

2 个答案:

答案 0 :(得分:1)

您需要链接Derelict2的库。

在导入下方,添加:

pragma(lib, "relevant-libraries");

例如:

pragma(lib, "/usr/include/d/Derelict2/lib/libDerelictGL.a");
pragma(lib, "/usr/include/d/Derelict2/lib/libDerelictGLU.a");
pragma(lib, "/usr/include/d/Derelict2/lib/libDerelictSDL.a");
pragma(lib, "/usr/include/d/Derelict2/lib/libDerelictUtil.a");

如果您使用的是Windows,则这些库文件将为.lib s

或者,您可以通过添加以下标志将文件添加到构建命令:

-L/usr/inlcude/d/Derelict2/lib/libDerelictSDL.a -L/usr/ ... etc.

从外观上看,您只需要引用SDL库。

答案 1 :(得分:1)

只需使用类似that的rdmd,第二行。

奇怪的是,它抱怨_D8derelict3sdl8sdlfuncs8SDL_InitPUkZi。 看起来像缺少外部(C)。