使用 MinGW 和 MSYS 找不到 .dll

Posted

技术标签:

【中文标题】使用 MinGW 和 MSYS 找不到 .dll【英文标题】:Cannot find .dll using MinGW and MSYS 【发布时间】:2013-09-15 16:13:59 【问题描述】:

操作系统:Windows 7

我在桌面上的一个目录中拥有源代码以及我正在使用的所有库文件。我正在使用安装 MinGW 时创建的 msys.bat 运行 shell。我尝试运行以下(以及许多其他):

g++ -I. -L. -o opengltest.exe opengltest.cpp -lglew32 -lglew32s -lglew32.dll

我收到以下错误:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lglew32.dll

collect2: ld returned 1 exit status

当我使用-L 开关和整个C:/Users/... 路径时也会发生这种情况,但我得到了同样的错误。同样,glew32.dll 与 .cpp 位于同一目录中,这与我在 shell 中工作的目录相同。我已经从多个帖子中尝试了多种解决方案,但似乎我仍然遗漏了一些东西。我认为使用 -L. 是告诉 MinGW 查看工作目录的一种直接方法,但显然它不是那样工作的。

【问题讨论】:

我还注意到,当我删除 -L. 时,它返回的错误也找不到其他库,这告诉我开关工作正常,这只是 .dll 的问题文件它不喜欢。 【参考方案1】:

不要在同一个应用程序中同时链接 glew 的动态和静态链接版本。这是没有意义的。也不要链接 glew32.dll,这同样没有意义。

最重要的是,不要将 DLL 版本的 glew 与 g++ 一起使用 - 这将不起作用(请参阅我的 previous answers 之一以了解原因)。相反,#define GLEW_STATIC(如果您使用-DGLEW_STATIC 作为编译器开关会更好)并且链接到glew32s

【讨论】:

所以 glew32.lib 和 glew32.dll 本质上包含相同的信息,只有一个被格式化为静态库,另一个是动态的?根据您的建议,我将#define GLEW_STATIC 添加到opengltest.cpp,然后运行g++ -I. -L. -o opengltest.exe opengltest.cpp -lglew32s,我得到了未定义参考错误的清单。作为参考,here 是我要编译的源代码,here 是我得到的错误的屏幕截图。 好吧,你还是要链接到opengl32,所以加-lopengl32 不,glew32.lib是导入库,glew32.dll是对应的动态链接库。 DLL 的工作方式与普通共享对象略有不同。无论如何,您的软件中都不需要任何一个。 在阅读了 GLEW 安装链接后,还有一些我不明白的地方:它说“您可能还需要更改 glew.c 中的包含指令”。这个因素在这里如何?我的工作目录中没有一个名为 glew.c 的文件。 在添加 -lopengl32 之后,它给了我一个更短的错误列表,它们似乎都与过剩有关。在安装说明中提到了 glut.h 文件,但我认为该功能是由 freeglut 库处理的。这段代码不是我写的,作者似乎可以运行它,所以我猜这些错误更多地与编译有关,而不是与省略的包含文件有关。有什么想法吗?顺便说一句,非常感谢您的帮助。

以上是关于使用 MinGW 和 MSYS 找不到 .dll的主要内容,如果未能解决你的问题,请参考以下文章

msys2 找不到 mingw64

msys/MinGW,即使已安装也找不到 libpng,试图编译 xpdf(特别是 pdftopng)

MinGW make:复制:找不到命令

找不到自动制作错误“./ltmain.sh”

MinGW/MSYS 产生错误 2 和错误 127

MSYS2 MinGW 不包括 mingw-get 包管理器