1

我正在尝试在 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 链接,dub 会告诉我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"

如果我尝试与 a 链接.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 构建的。我有什么不同的做法?

4

1 回答 1

3

这里分三种情况:

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

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

下载这个东西来获得 implib.exe:http ://ftp.digitalmars.com/bup.zip 并使用它从 .dll 制作一个 .lib:implib /s yourdll.lib yourdll.dll并尝试与新的 lib 链接。(就像你已经在做的那样将它添加到文件列表中)

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

到那时它应该可以工作。

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

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

提示:如果您使用 dmd 的 Windows 安装程序,请从开始菜单打开“D2 64 位命令提示符”以设置路径。它会告诉你使用-m64,但你也可以-m32mscoff在那个环境中使用,它应该可以工作。如果一切安装正确。

  • -m6464 位构建。基本上与 mscoff 开关相同 - 您需要路径中的 Visual C++ 链接器 - 但使用 64 位而不是 32 位。当然,这也需要 64 位 dll 和 lib。

在评论中,听起来您可能还面临一些错误,我不知道,以上是其他一切是否正常。

于 2016-03-31T14:03:01.333 回答