我正在尝试在Visual Studio 2019中构建一个使用GLFW预编译静态库的程序(如果重要的话,它适用于Vulkan而不是OpenGL)。当我在调试模式下构建时,它可以正常编译。在发布模式下编译时,出现以下错误:
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(win32_joystick.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(wgl_context.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(egl_context.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(osmesa_context.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(input.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(win32_init.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(win32_monitor.obj) 1
Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(context.obj) 1
以及与glfw有关的更多错误。
我已经检查过:
a)我的调试和发布配置都配置为完全相同,以便链接到glfw。
b)glfw3.lib文件来自lib-vc2019文件夹中最新下载的预编译二进制文件。
c)它们是64位二进制文件,调试和发行版均以64位模式构建
仅出于测试目的,我还尝试了32位二进制文件(显然不起作用),并且我还删除了该库,以确保两个版本都给出了相同的错误消息(确实如此)。
我使用的唯一glfw函数是
glfwInit()
glfwGetRequiredInstanceExtensions()
glfwCreateWindow()
glfwCreateWindowSurface()
glfwDestroyWindow()
glfwTerminate()
我猜代码不是问题;但这是由一些我不知道的编译器设置引起的,默认情况下,发行版配置中的设置有所不同。
根据Adrian的回答,我检查了该类别中的其他配置,发现“ C / C ++代码生成”下的“运行时库”选项是问题所在。在调试中,它设置为“多线程调试DLL(/ MDd)”,在发行版中,它设置为“多线程DLL(/ MDd)”。将其更改为调试DLL后,该发行版将编译并运行而不会出现问题。
这似乎是一个glfw错误,但对于它所做的更改,此设置有效
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句