EP11 导入GLFW 踩坑记录【Cherno Hazel游戏引擎教程】

EP11 Window Abstraction and GLFW

这一集引入了GLFW库来创建窗口。C++中导入库是一件非常麻烦的事情,有很多种方法。
本博客记录导入库所踩的坑,文中内容也可以作为C++中项目中导入库的一个简单教程。

导入GLFW库

Cherno的做法是将GLFW库fork到了自己的仓库然后加入了premake5.lua文件,然后如下git submodule命令将该库添加为Hazel的子模块。

$ git submodule add https://github.com/TheCherno/glfw Hazel/vendor/GLFW

在Hazel的premake5.lua文件中把GLFW的premake5.lua包含进来,并且添加inlcudedirs路径和links。

-- in Hazel's premake5.lua
include "Hazel/vendor/GLFW"

-- Include directories relative to root folder (solution directory)
IncludeDir = {}
IncludeDir["GLFW"] = "Hazel/vendor/GLFW/include"

project "Hazel"
  includedirs
	{
		"%{IncludeDir.GLFW}"
	}

	links 
	{ 
		"GLFW",
		"opengl32.lib"
	}

问题

我所遇到的坑就在于,完全跟着视频做了之后冒出来很多LINK ERROR。

我Google了好久,翻遍了StackOverflow上的问题,都没有解决这个LINK ERROR。


3>GLFW.lib(init.obj) : error LNK2019: unresolved external symbol _glfwSelectPlatform referenced in function glfwInit
3>GLFW.lib(vulkan.obj) : error LNK2019: unresolved external symbol _glfwPlatformLoadModule referenced in function _glfwInitVulkan
3>GLFW.lib(vulkan.obj) : error LNK2019: unresolved external symbol _glfwPlatformFreeModule referenced in function _glfwInitVulkan
3>GLFW.lib(vulkan.obj) : error LNK2019: unresolved external symbol _glfwPlatformGetModuleSymbol referenced in function _glfwInitVulkan
error LNK2019: unresolved external symbol DwmExtendFrameIntoClientArea referenced in function windowProc

在我完全确信我的代码与视频中完全一致之后,我下载了Cherno的代码,切到这个视频对应的commit,构建运行都没问题,这说明Cherno的做法不会有问题。

解决

就在一筹莫展之际,我到GitHub上看了一下这个commit对应的代码(下图),我突然意识到Cherno当时加进来的库版本应该是他做视频的时候的版本,在此之后他又对他的GLFW库进行了修改,这可能是导致以上LINK ERROR的原因。

image

于是我就到GLFW文件夹下,将GLFW子模块切换到b4b4319 commit,然后把GLFW下的premake5.lua中硬编码的systemversion改为latest,重新生成一下项目,果然构建运行都没问题了。

-- in GLFW's premake5.lua
systemversion "latest"
$ git checkout -f b4b4319

原文链接:https://www.cnblogs.com/zhangyi1357/p/16078602.html
转载请注明出处!

posted @ 2022-03-30 19:07  zhangyi1357  阅读(617)  评论(2编辑  收藏  举报