使用Dub与Windows上的C库链接

时间:2016-03-31 11:32:43

标签: windows d dub

我想在windows上链接glfw。

在Linux上它是相当直接的:

dependency "derelict-glfw3" version="~>2.0.0"
subConfiguration "derelict-glfw3" "derelict-glfw3-static"

sourceFiles "deps/glfw/build/src/libglfw3.a" platform="posix"
libs"Xi" "pthread" "X11" "Xxf86vm" "Xrandr" "pthread" "GL" "GLU" "Xinerama" "Xcursor" platform="posix"

如果我尝试在Windows上链接.dll,配音告诉我Error: unrecognized file extension dll.

dependency "derelict-glfw3" version="~>2.0.0"
subConfiguration "derelict-glfw3" "derelict-glfw3-static"

sourceFiles "deps\\glfw\\build\\src\\Debug\\glfw3.dll" platform="windows"

如果我尝试与.lib关联,则dub会告诉我COFF is not supported

dependency "derelict-glfw3" version="~>2.0.0"
subConfiguration "derelict-glfw3" "derelict-glfw3-static"

sourceFiles "deps\\glfw\\build\\src\\Debug\\glfw3.lib" platform="windows"

GLFW是使用vs2013构建的。我有什么不同的做法?

1 个答案:

答案 0 :(得分:3)

这里有三种情况:

  • 默认32位Windows版本。默认情况下,Windows上的dmd使用旧的OMF链接器格式构建32位。您不能直接链接到DLL并需要.lib。但由于它使用旧格式,因此提供的大多数.libs都不起作用 - 您必须自己制作。

(大声笑我想在列表项中这个,但降价很糟糕。无论如何)

下载此内容以获取implib.exe:http://ftp.digitalmars.com/bup.zip 并使用它从.dll:implib /s yourdll.lib yourdll.dll创建.lib并尝试链接新的lib。 (像你一直在做的那样把它添加到文件列表中)

如果它不起作用,请再次尝试该命令,但这次没有/s开关。

它应该适用于那时。

  • -m32mscoff 32位版本。使用该标志到dmd,它将使用新的COFF格式而不是旧的omf格式输出32位程序。要使它工作,你的路径中的link.exe必须是来自Visual Studio的Microsoft链接器,而不是默认的Digital Mars optlink.exe(令人困惑的是,直到最近才被称为link.exe。很好,当它是微软的兼容替代品......二十年前......)。

无论如何,如果您安装了Microsoft C ++编译器和链接器并将该link.exe放在路径中,那么dmd -m32mscoff应该可以使用dll中的现有.lib文件。

提示:如果您使用Windows安装程序进行dmd,请从开始菜单中打开“D2 64位命令提示符”以获取路径设置。它会告诉您使用-m64,但您也可以使用该环境中的-m32mscoff,它应该有效。如果一切安装得当。

  • -m64 64位版本。基本上与mscoff开关相同 - 你需要路径中的Visual C ++链接器 - 但是64位而不是32位。当然,这也需要一个64位的dll和lib。

在评论中,听起来你可能也会遇到一些错误,我不知道,上面是其他一切正常工作。