首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MinGW上链接GLFW时出现未定义的引用错误

在MinGW上链接GLFW时出现未定义的引用错误
EN

Stack Overflow用户
提问于 2014-03-25 08:09:15
回答 1查看 7.8K关注 0票数 7

我正在尝试使用minGW在Windows上使用GLEW和GLFW开发一个openGL应用程序。在当前目录project/中,我有目录src/bin/glfw-3.0.4.bin.WIN64/。我在src/目录中有test.cppglew.hglew.cwglew.h文件。

目录./glfw-3.0.4.bin.WIN64/include/包含GLFW/glfw3.h头文件。

目录./glfw-3.0.4.bin.WIN64/lib-mingw/包含glfw3.dllglfw3dll.alibglfw3.a

我的主文件test.cpp包含

代码语言:javascript
复制
#include "glew.h"
#include "GLFW/glfw3.h"

#include <stdio.h>

int main(int argc, char** argv) {
    printf("Hello, World!\n");

    glewInit();
    glfwInit();
}

我通过运行以下命令从project/目录编译该程序(为了可读性,将其分成两行)

代码语言:javascript
复制
gcc -DGLEW_STATIC -DGLFW_DLL -o ./bin/test ./src/*.cpp ./src/glew.c 
-I ./glfw-3.0.4.bin.WIN64/include/ -L ./glfw-3.0.4.bin.WIN64/lib-mingw/ -lglfw3 -lopengl32

我得到了以下错误:

代码语言:javascript
复制
undefined reference to `_imp_glfwInit'

我认为这个问题与我错误地链接GLFW库有关。据我所知,包括编译器选项-lglfw3将告诉gcc链接./glfw-3.0.4.bin.WIN64/lib-mingw/glfw3.dll,其中包含glfwInit()的定义。

我看过与我类似的其他问题的解决方案,他们提出了一些建议,比如将dll文件复制到源代码/二进制目录,以及更改-l选项的顺序,但似乎没有一个能为我解决问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-25 14:27:41

您的问题是,gcc遵循严格的库命名约定。它尝试查找glfw3.dll.a,但没有找到(因为它被命名为glfw3dll.a -简单的重命名可以解决您的问题)。

下一步,它寻找libglfw3.a,并成功-但它是一个静态库,而引用声明为头文件中的动态(棘手的窗口DECLSPEC...这个问题在linux上是不存在的)。所以,它找不到_imp__glfwInit,因为在静态库中它只被称为glfwInit,所以你会得到一个错误。

删除libglfw3.a也是一种选择--在这种情况下,gcc会更进一步,最终找到glfw3.dll并使用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22623087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档