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的原因。
於是我就到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
轉載請注明出處!