gpt4 book ai didi

windows - 使用 Dub 链接 Windows 上的 C 库

转载 作者:可可西里 更新时间:2023-11-01 11:25:57 24 4
gpt4 key购买 nike

我正在尝试在 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 会告诉我 错误:无法识别的文件扩展名 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 不受支持

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 构建的。我必须做些什么不同的事情?

最佳答案

这里分三种情况:

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

(哈哈,我想要这个在列表项中,但是 Markdown 很烂。随便)

下载这个东西来获取 implib.exe:http://ftp.digitalmars.com/bup.zip并使用它从 .dll 生成 .lib:implib/s yoordll.lib yoordll.dll 并尝试链接到新的 lib。 (将其添加到文件列表中,就像您已经在做的那样)

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

到那时它应该可以工作了。

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

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

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

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

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

关于windows - 使用 Dub 链接 Windows 上的 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com