动态链接 GLFW 和 make

Posted

技术标签:

【中文标题】动态链接 GLFW 和 make【英文标题】:Dynamic linking GLFW with make 【发布时间】:2014-11-30 12:13:36 【问题描述】:

我正在尝试使用带有最小 opengl 的 glfw 编译一个简单的教程程序。我的问题似乎是 glfw 库顽固地拒绝动态链接。相关的make命令是:

"C:\Program Files\mingw-w64\mingw64\bin\g++" -Wall -m64 -D GLFW_DLL -l opengl32 -l glfw3 main.o -o triangle <br />

main.o 文件由 c++ 文件 main.cpp 编译而成:

"C:\Program Files\mingw-w64\mingw64\bin\g++" -c -Wall -m64 -D GLFW_DLL main.cpp -o main.o 

在代码中对 glfw 函数的每次引用都会导致对相关实现函数的未定义引用(例如,__imp_glfwInit for glfwInit => undefined reference to '__imp_glfwInit') 构建系统是 mingw-w64 [windows],通过命令行使用 make,glfw 3.0.4。 glfw 库是 64 位的,并且可以使用最新的稳定版本。它由以下文件组成:

glfw3.dll glfw3dll.a libglfw3.a 'WIN-64' 'lib-mingw' 分别是哪些 经过广泛的搜索(GLFW帮助页面无用[处理不适用或在3.0.4的情况下没有有用信息的2.7.2],大多数***处理静态链接等)我一直无法找到一个可行的解决方案。 在处理无法动态链接的链接器时,我是否缺少一些东西? 澄清我犯的任何错误或某种形式的解决方案仍然允许我使用动态库将不胜感激

【问题讨论】:

【参考方案1】:

提供的文件似乎不适用于 mingw-w64,仅与 64 位 mingw 兼容。 因此,剩下的唯一选择是链接到 dll(感谢 greatwolf:https://***.com/a/17734362/2396393)。编译成对象的代码就变成了:

"C:\Program Files\mingw-w64\mingw64\bin\g++" -Wall -m64 -D GLFW_DLL main.o -o triangle ./lib/glfw3.dll -l opengl32 

dll glfw3 在 lib 文件夹中的位置

【讨论】:

以上是关于动态链接 GLFW 和 make的主要内容,如果未能解决你的问题,请参考以下文章

windows下cmake生成动态链接库dll

Makefile常用万能模板(包括静态链接库动态链接库可执行文件)

Makefile常用万能模板(包括静态链接库动态链接库可执行文件)

eclipse编译动态链接库文件报错 relocation R_X86_64_32 against `.data' can not be used when making a shared o

gcc,gdb,make学习

makefile 嵌套