Cherno 游戏引擎GLFW窗口踩坑:error LNK2019: 无法解析的外部符号 _glfwSelectPlatform,函数 glfwInit 中引用了该符号(类似报错)

仓库使用流程:

这个问题是我在学习制作小玩意的时候发现的问题,大致的流程是

1.在Github上fork了截止2024.3.3日最新的GLFW仓库

2.在Github上直接为已Fork的GLFW仓库上传一个premake 文件

3.上传完毕后,将该仓库add submodule 下来到本地

 

熟悉的兄弟们已经看出来了,没错,这是Cherno的教程。(Window Abstraction and GLFW)

那么在“窗口抽象和GLFW“”这一集相信很多人都信心满满的坚持到最后一步,可惜遇到这个完全让人没有思路的问题(更重要的是来自输出窗口,完全看不明白啊喂)

 

发现并分析问题:

036b0da7baf94b0d8f854fe550cd9c45.jpg

 

于是我开始分析:(等不及可以直接看最终解决方法)

首先,代码近乎是差不多的,所以这里应该没有问题。

参考了博客园上一位博主的文章(https://www.cnblogs.com/zhangyi1357/p/16078602.html)这和我最初的想法不约而同:即前后相差了很久的时间,应该是GLFW更新的版本问题。

但与该博主不同的是,他Fork的是Cherno的GLFW仓库,而我Fork的是官方的GLFW仓库,而且是最新的那个。

所以他提出了应该在premake5.lua文件中做systemversion:latest这个Cherno视频中提出的更改时,我是有些诧异的,但是他做到了正常运行,我猜想可能只是与Cherno对其库的premake文件修改有关,天时地利人和故他成功了。

而我与其有些差别,于是我开始搜索,并没有进展,因为似乎以“复刻Cherno 11 集程序遇到的困难”这样的关键词几乎没有能得到的结果。

我便开始以输入框中的报错问题入手

中文:

error LNK2019: 无法解析的外部符号 _glfwSelectPlatform,函数 glfwInit 中引用了该符号

英文:

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

一开始很难,类似的问题在谷歌上稍有见效 ,而且多是英文。

从这篇文章开始(参考文章之一)我开始考虑是否因为Win32或glfw3.lib缺失这样的属性问题,但是超出我的理解范畴。但这让我确定问题出现在项目配置中,无论是项目目录或者premake5.lua中出现的问题。

 

##最终解决方法

然后我发现了这篇文章,真的谢谢这位小哥 :)

c++ - trouble linking with glfw using premake and vs2019 - Stack Overflow

可能大家进不去,我截个屏,稍有遗失但问题不大

eba6ab94767a4ff4926a4a74238344b4.png

89780c01bb5f48be9ff1f15f2e77df8c.png

afc3684cc47e450fa57bc9901d25a740.png

问题呢,大概也就是premake文件配置的过程中缺失了一些必要的文件,有点刁钻,这个小哥还是使用了一些额外的语句编辑了premake文件,我则直接在Cherno的文件上做了修改

project "GLFW"
    kind "StaticLib"
    language "C"

	targetdir ("bin/" .. outputdir .. "/%{prj.name}")
    objdir ("bin-int/" .. outputdir .. "/%{prj.name}")

	files
	{
        "include/GLFW/glfw3.h",
        "include/GLFW/glfw3native.h",
        "src/glfw_config.h",       --??should it to be delete?
        "src/internal.h",       --
        "src/platform.h",       --
        "src/mappings.h",       --
        "src/context.c",
        "src/init.c",
        "src/input.c",
        "src/monitor.c",
        "src/platform.c",       --
        "src/vulkan.c",
        "src/window.c",
        "src/egl_context.c",        --
        "src/osmesa_context.c",     --
        "src/null_platform.h",      --
        "src/null_joystick.h",      --
        "src/null_init.c",      --
    
        "src/null_monitor.c",       --
        "src/null_window.c",        --
        "src/null_joystick.c",      --
    }

	filter "system:windows"
        buildoptions { "-std=c11", "-lgdi32" }
        systemversion "latest"
        staticruntime "On"

        files
        {
            "src/win32_init.c",
            "src/win32_module.c",   --
            "src/win32_joystick.c",
            "src/win32_monitor.c",
            "src/win32_time.h",     --
            "src/win32_time.c",
            "src/win32_thread.h",   --解决Vulkan.obj相关问题
            "src/win32_thread.c",
            "src/win32_window.c",
            "src/wgl_context.c",
            "src/egl_context.c",
            "src/osmesa_context.c"
        }

		defines 
		{ 
            "_GLFW_WIN32",
            "_CRT_SECURE_NO_WARNINGS"
		}
    filter { "system:windows", "configurations:Release" }
        buildoptions "/MT"

我在添加的文件之后加上了"--"注释符作为标记,可以看到,这样一来能够解决报错。

关于“ "src/glfw_config.h",       --??should it to be delete?”

我不知道应不应该删除,但我留下了这个文件,并且成功运行了。

451444cecc224b49ad6f858eb3ba1939.png

 

结语:

希望能帮到大家啊,如果有在学的可以多钻研钻研,我也同步了一个Github仓库(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno) ,里面也有自己做的笔记。

如果是刚进入Github大家庭的兄弟,点击commit可以查看每一次提交的代码,这样方便对比代码。10deaef130244c7ab40f5550e2d5f89f.png

 

最后,真的希望能帮助到你!

 

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值