Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用GLFW预编译的二进制文件编译Visual Studio 2019发行版_C++_Compiler Errors_Glfw_Visual Studio 2019 - Fatal编程技术网

C++ 如何使用GLFW预编译的二进制文件编译Visual Studio 2019发行版

C++ 如何使用GLFW预编译的二进制文件编译Visual Studio 2019发行版,c++,compiler-errors,glfw,visual-studio-2019,C++,Compiler Errors,Glfw,Visual Studio 2019,我正试图在VisualStudio2019中构建一个使用GLFW预编译静态库的程序(如果有必要,它是针对Vulkan而不是OpenGL)。当我在调试模式下构建时,它编译得很好。在发布模式下编译时,会出现以下错误: Error LNK2001 unresolved external symbol __security_check_cookie [myapp] [project_path]\glfw3.lib(win32_joystick.obj) 1 Error LNK200

我正试图在VisualStudio2019中构建一个使用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()

我猜代码不是问题所在;但是它是由一些我不知道的编译器设置引起的,这些设置在发行版配置中默认是不同的。

这是编译器“安全检查”选项的问题(很可能)。在您的项目设置中,转到C/C++和“代码生成”的设置,您应该在其中选择“禁用安全检查”或“启用安全检查”,以调试配置的设置(有效)为准


但一定要检查调试版本和发布版本之间的设置是否不同!我怀疑您必须选择与构建GLFW库时相同的设置。

根据Adrian的回答,我检查了该类别中的其他配置,发现“C/C++代码生成”下的“运行时库”选项是问题所在。在调试中,它被设置为“多线程调试DLL(/MDd)”,在发行版中,它被设置为“多线程DLL(/MD)”。将其更改为调试DLL后,发布版本编译并运行时不会出现问题


这看起来像是一个glfw错误,但对于它正在更改的内容,此设置的工作原理

看起来两种配置对于该设置都是相同的(它被设置为启用安全检查)。但在同一类别中,基本运行时检查、运行时库和启用函数级链接有不同的选项。这些都是问题吗?很高兴它起作用了!但是,当所有其他选项都设置为“发布”选项(例如定义了
NDEBUG
)时,使用
/MDd
构建选项有时会导致其他问题。我会联系GLFW人员,让他们知道他们已经发布了调试构建。