使用 Dub 链接 Windows 上的 C 库
Linking with C libraries on Windows with Dub
我正尝试在 windows 上 link 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"
如果我尝试 link 使用 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"
如果我尝试使用 .lib
link,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 构建的。我需要做哪些不同的事情?
这里有三种情况:
- 默认 32 位 Windows 构建。默认情况下,Windows 上的 dmd 使用旧的 OMF linker 格式构建 32 位。您不能 link 直接访问 dll 而需要 .lib。但由于它使用旧格式,提供的大多数 .libs 都不起作用 - 你必须自己制作。
(哈哈,我想要这个在列表项中,但降价很烂。随便)
下载这个东西得到implib.exe:http://ftp.digitalmars.com/bup.zip
并使用它从 .dll 生成 .lib:implib /s yourdll.lib yourdll.dll
并尝试 link 使用新的 lib。 (将其添加到文件列表中,就像您已经在做的那样)
如果它不起作用,请再次尝试该命令,但这次没有 /s
开关。
到时候应该可以了。
-m32mscoff
32 位版本。使用 dmd 的标志,它将使用新的 COFF 格式而不是旧的 omf 格式输出 32 位程序。要使其正常工作,您路径中的 link.exe
必须是来自 Visual Studio 的 Microsoft linker,而不是默认的 Digital Mars optlink.exe(令人困惑的是,它也被称为link.exe
直到最近。当它是 Microsoft 的兼容替代品时,那真是太好了……二十年前……)。
无论如何,如果您安装了 Microsoft C++ 编译器和 linker 并将 link.exe 放在您的路径中,dmd -m32mscoff
应该可以使用现有的 .lib
文件dll。
提示:如果您使用了 dmd 的 Windows 安装程序,请从开始菜单中打开 "D2 64 bit command prompt" 以设置路径。它会告诉您使用 -m64
,但您也可以在该环境中使用 -m32mscoff
,它应该可以工作。如果一切安装正确。
-m64
64 位版本。基本上与 mscoff 开关相同 - 你需要 Visual C++ linker 在你的路径中 - 但是是 64 位而不是 32 位。当然,这也需要 64 位 dll 和 lib。
在评论中,听起来您可能还面临一些错误,我不知道,以上是如果其他一切正常。
我正尝试在 windows 上 link 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"
如果我尝试 link 使用 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"
如果我尝试使用 .lib
link,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 构建的。我需要做哪些不同的事情?
这里有三种情况:
- 默认 32 位 Windows 构建。默认情况下,Windows 上的 dmd 使用旧的 OMF linker 格式构建 32 位。您不能 link 直接访问 dll 而需要 .lib。但由于它使用旧格式,提供的大多数 .libs 都不起作用 - 你必须自己制作。
(哈哈,我想要这个在列表项中,但降价很烂。随便)
下载这个东西得到implib.exe:http://ftp.digitalmars.com/bup.zip
并使用它从 .dll 生成 .lib:implib /s yourdll.lib yourdll.dll
并尝试 link 使用新的 lib。 (将其添加到文件列表中,就像您已经在做的那样)
如果它不起作用,请再次尝试该命令,但这次没有 /s
开关。
到时候应该可以了。
-m32mscoff
32 位版本。使用 dmd 的标志,它将使用新的 COFF 格式而不是旧的 omf 格式输出 32 位程序。要使其正常工作,您路径中的link.exe
必须是来自 Visual Studio 的 Microsoft linker,而不是默认的 Digital Mars optlink.exe(令人困惑的是,它也被称为link.exe
直到最近。当它是 Microsoft 的兼容替代品时,那真是太好了……二十年前……)。
无论如何,如果您安装了 Microsoft C++ 编译器和 linker 并将 link.exe 放在您的路径中,dmd -m32mscoff
应该可以使用现有的 .lib
文件dll。
提示:如果您使用了 dmd 的 Windows 安装程序,请从开始菜单中打开 "D2 64 bit command prompt" 以设置路径。它会告诉您使用 -m64
,但您也可以在该环境中使用 -m32mscoff
,它应该可以工作。如果一切安装正确。
-m64
64 位版本。基本上与 mscoff 开关相同 - 你需要 Visual C++ linker 在你的路径中 - 但是是 64 位而不是 32 位。当然,这也需要 64 位 dll 和 lib。
在评论中,听起来您可能还面临一些错误,我不知道,以上是如果其他一切正常。