D программирование с Derelict и SDL - PullRequest
1 голос
/ 21 ноября 2011

Здравствуйте, я недавно загрузил Derelict2, проверив ветвь 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 ]

1 голос
/ 21 ноября 2011

Просто используйте rdmd, например , , вторая строка.

Странно то, что он жалуется на _D8derelict3sdl8sdlfuncs8SDL_InitPUkZi. Похоже, экстерьер (С) отсутствует.

1 голос
/ 21 ноября 2011

Вам нужно связаться с библиотеками 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.

...