Linker D SDL与Windows上的Derelict2绑定

Linker D SDL与Windows上的Derelict2绑定,linker,makefile,sdl,d,Linker,Makefile,Sdl,D,我在编译一个使用SDL的D程序时遇到了问题,该程序使用一个从DOS调用的makefile,其中SDL应该由Derelict包装。此外,如果我在测试程序中使用pragma进行链接,它会告诉我lib文件有错误43,不是有效的库文件 如何使它链接,我是否使用了错误的堆栈(Visual C/C++)?我认为不是因为它在寻找lib文件 测试程序 //pragma(lib, "D:\\Development\\SDL-1.2.15\\lib\\x86\\SDL.lib"); import derelict.

我在编译一个使用SDL的D程序时遇到了问题,该程序使用一个从DOS调用的makefile,其中SDL应该由Derelict包装。此外,如果我在测试程序中使用pragma进行链接,它会告诉我lib文件有错误43,不是有效的库文件

如何使它链接,我是否使用了错误的堆栈(Visual C/C++)?我认为不是因为它在寻找lib文件

测试程序

//pragma(lib, "D:\\Development\\SDL-1.2.15\\lib\\x86\\SDL.lib");
import derelict.sdl.sdl;

void main()
{
    DerelictSDL.load();

    // now you can call SDL functions
}
生成文件

DMD = dmd
WINDRES = windres.exe
LDFLAGS = -O2 -s `sdl-config --libs`
DFLAGS =
RM   = rm -f
#OBJS = main.o graphic.o grid.o node.o appicon.opc
SRCS = toh_fractal.d
# graphic.d grid.d node.d appicon.opc
PROG = toh_fractal
DERELICT = D:\\Development\\Derelict2
INCLUDE_DERELICT = $(DERELICT)\\import
LIB_DERELICT = DerelictSDL 
LIB_SDL = SDL
#$(DERELICT)\\lib\\
VERS = 0.1.1

.PHONY: clean distclean
all: $(PROG)

$(PROG): $(SRCS)
    $(DMD) $(DFLAGS) $(PROG) -I$(INCLUDE_DERELICT) appicon.res -L$(LIB_DERELICT) -L$(LIB_SDL) 

appicon.res: appicon.rc sierpinski.ico
    windres -i appicon.rc -o appicon.res

distclean:
    $(RM) *~ $(OBJS) appicon.opc stdout.txt stderr.txt

clean:
    $(RM) *~ $(OBJS) $(PROG) appicon.opc stdout.txt stderr.txt
生成文件输出

C:\D\D_fractals_of_hanoi>make all
dmd  toh_fractal -ID:\\Development\\Derelict2\\import appicon.res -LDerelictSDL  -LSDL
OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
OPTLINK : Warning 9: Unknown Option : NOIDERELICTSDLSDL
toh_fractal.obj(toh_fractal)
 Error 42: Symbol Undefined _D8derelict3sdl3sdl12__ModuleInfoZ
toh_fractal.obj(toh_fractal)
 Error 42: Symbol Undefined         _D8derelict3sdl3sdl11DerelictSDLC8derelict3sdl3sdl17DerelictSDLLoader
--- errorlevel 2

废弃意味着不能与动态链接一起使用。您应该将正确的.so或.dll放在应用程序目录中,Derelict会找到它。

Derelict使用C
dl
库(
dlopen
dlclose
dlsym
)来动态加载共享库,因此您必须使用动态库。

dmd不能使用VC库文件。它需要由dmc创建的OMF文件或使用类似于objconv的东西转换的OMF文件。objconv感觉无法处理导入库,但coffimplib.exe似乎做了些什么。objconv接受SDLmain.lib,而coffimplib.exe不接受