3

我有这个非常简单的 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);。我想不通。这是我用 D 导入的第一个非 STL 库,所以希望我的错误很明显,有人能看到吗?

4

3 回答 3

5

您还必须与 SDL 库链接。如果您有一个格式正确的文件,只需将其与源文件一起传递给编译器即可。或者,您可以pragma(lib, "SDL.lib")在程序中添加类似的内容。

于 2011-02-25T06:56:12.290 回答
0

首先,您还需要 SDL 库的 D 绑定。

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;
}

这是我的示例测试程序。首先我下载了​​ VC6 的 SDL 开发库

比您需要将库文件转换为 OMF 格式。我更喜欢Borland C++ 编译器附带的coff2omf工具,因为它是免费的。DigitalMars 有一个同名的工具,但它不是免费的。这对我来说没有意义。

coff2omf.exe SDL.lib SDL2.lib

而不是我像这样编译和链接:

dmd -c test.d sdl.d

链接 test.obj sdl.obj SDL2.lib

这个对我有用。

于 2011-05-20T11:15:17.880 回答
0

此外,如果您需要 SDL 库的 D 绑定,您可以从此处下载。文件名为sdl.d但尚未完成。

于 2011-05-20T11:25:52.797 回答