2011-02-25 64 views
3

我有一個非常簡單的程序d(pk.d):d和SDL - 功能未定義

​​

我有一個非常簡單的化妝腳本(我在這裏的Windows,但窗戶d編譯器來包裝的一個bash解釋):

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

$(DMD) pk $(DFLAGS) 
pk 

但是,當我建立它,我得到Error 42: Symbol Undefined _SDL_Init

它成功地導入SDL好吧,它˚F inds SDL_INIT_VIDEO就好了。我繼續檢查SDL.d,發現SDL_Init有一個定義:int SDL_Init(Uint32 flags);。我無法弄清楚這一點。這是我用D導入的第一個非STL庫,所以希望我的錯誤是顯而易見的,任何人都可以看到它?

回答

5

您還必須鏈接到SDL庫。如果你有一個正確的格式,只需將它與源文件一起傳遞給編譯器即可。或者,您可以在程序中添加諸如pragma(lib, "SDL.lib")之類的內容。

+0

FWIW:「符號未定義」和修改後的名稱(注意添加的前導'_')通常表示鏈接階段出現錯誤,大部分時間等於忘記添加鏈接。 – BCS 2011-03-01 02:45:41

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

這是我的樣品測試程序。首先我下載了​​SDL development libraries for VC6

比你需要將庫文件轉換爲OMF格式。我首選coff2omf工具,因爲它是免費的,所以隨附Borland C++ Compiler。 DigitalMars有一個同名的工具,但它不是免費的。這對我沒有意義。

coff2omf.exe SDL.lib SDL2.lib

而且比我編譯和鏈接這樣的:

DMD -c test.d sdl.d

鏈路測試.obj sdl.obj SDL2.lib

它適用於我。

0

另外,如果您需要SDL庫的D綁定,您可以從here下載。文件名是sdl.d但尚未完成。