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 バインディングが必要な場合は、ここからダウンロードできます。ファイル名はsdl.d ですが、まだ完全ではありません。

于 2011-05-20T11:25:52.797 に答える
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++ Compilerに同梱されている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 に答える