Compiler errors D和SDL-函数未定义

Compiler errors D和SDL-函数未定义,compiler-errors,sdl,d,undefined-symbol,Compiler Errors,Sdl,D,Undefined Symbol,我有一个非常简单的D程序(pk.D): 但是当我构建它时,我得到了错误42:Symbol Undefined\u SDL\u Init 它成功地导入了SDL,并且发现SDL_INIT_视频很好。我继续检查SDL.d,发现SDL_Init有一个定义:intsdl_Init(Uint32标志)。我想不出来。这是我用D导入的第一个非STL库,希望我的错误很明显,有人能看到吗?您还必须链接到SDL库。如果有一个格式正确,只需将其与源文件一起传递给编译器即可。或者,您可以向程序中添加类似于pragma(l

我有一个非常简单的D程序(pk.D):

但是当我构建它时,我得到了
错误42:Symbol Undefined\u SDL\u Init


它成功地导入了SDL,并且发现SDL_INIT_视频很好。我继续检查SDL.d,发现SDL_Init有一个定义:
intsdl_Init(Uint32标志)。我想不出来。这是我用D导入的第一个非STL库,希望我的错误很明显,有人能看到吗?

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

首先,您还需要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;
}
这是我的样本测试程序。首先我下载了

然后,您需要将库文件转换为OMF格式。我更喜欢附带的coff2omf工具,因为它是免费的。DigitalMars有一个同名的工具,但它不是免费的。这对我来说毫无意义

coff2omf.exe SDL.lib SDL2.lib

然后我像那样编译和链接:

dmd-c测试d sdl.d

链接测试.obj sdl.obj SDL2.lib


它对我有用

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

FWIW:“未定义符号”和修改的名称(注意,添加的前导“25;”)通常表示链接阶段出现错误,大多数情况下,这相当于忘记添加链接内容。
DMD=dmd
DFLAGS=-I./lib/SDL 

$(DMD) pk $(DFLAGS)
pk
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;
}