D и SDL - функции не определены - PullRequest
3 голосов
/ 25 февраля 2011

У меня есть очень простая D-программа (pk.d):

import std.stdio;
import SDL;

int main(string[] args) {
    writefln("Hello world");
    if (SDL_Init( SDL_INIT_VIDEO ) < 0) {
        writefln("Unable to init SDL");
        return 1;
    }

    return 0;
}

У меня есть очень простой скрипт make (я здесь на Windows, но компилятор Windows D приходитпоставляется с интерпретатором bash):

DMD=dmd
DFLAGS=-I./lib/SDL 

$(DMD) pk $(DFLAGS)
pk

Но когда я его собираю, я получаю Error 42: Symbol Undefined _SDL_Init

Ему удалось импортировать SDL, и он находит SDL_INIT_VIDEOпросто хорошо.Я пошел дальше и проверил SDL.d и обнаружил, что существует определение для SDL_Init: int SDL_Init(Uint32 flags);.Я не могу понять это.Это первая не-STL библиотека, которую я импортировал с помощью D, так что, надеюсь, моя ошибка очевидна, кто-нибудь может ее увидеть?

Ответы [ 3 ]

5 голосов
/ 25 февраля 2011

Вы также должны связаться с библиотекой SDL.Если у вас есть файл в правильном формате, просто передайте его компилятору вместе с вашими исходными файлами.Кроме того, вы можете добавить что-то вроде pragma(lib, "SDL.lib") в вашу программу.

0 голосов
/ 20 мая 2011

Также, если вам нужны D-привязки для библиотеки SDL, вы можете скачать с здесь . Имя файла sdl.d , но еще не завершено.

0 голосов
/ 20 мая 2011

Прежде всего, вам также нужны D-привязки для библиотеки SDL.

import std.stdio;
import sdl;

int main(string[] args)
{
    SDL_Surface * screen;

    SDL_Init(SDL_INIT_EVERYTHING);
    screen = SDL_SetVideoMode(800, 600, 24, SDL_SWSURFACE);

    SDL_FillRect(screen, &screen.clip_rect, SDL_MapRGB(screen.format, 
                                                       0xFF, 0x00, 0x00));
    SDL_Flip(screen);

    SDL_Delay(6000);
    return 0;
}

Это мой пример программы испытаний.Прежде всего я скачал библиотеки разработки SDL для VC6

Чем вам нужно конвертировать библиотечные файлы в формат OMF.Я предпочел coff2omf инструмент, который поставляется с Borland C ++ Compiler , потому что он бесплатный.У DigitalMars есть инструмент с таким же названием, но он не бесплатный.Что не имеет смысла для меня.

coff2omf.exe SDL.lib SDL2.lib

А потом я скомпилировал и связал это так:

dmd -c test.d sdl.d

ссылка test.obj sdl.obj SDL2.lib

У меня работает.

...