JoeyDeVries / LearnOpenGL

Code repository of all OpenGL chapters from the book and its accompanying website https://learnopengl.com
https://learnopengl.com
Other
10.86k stars 2.78k forks source link

Compile failed on x86 platform with msvc. #252

Open qd1332543 opened 2 years ago

qd1332543 commented 2 years ago

When I used msvc to compile the project under the windows x86 platform, a lot of error messages appeared. I think it may be caused by the library required by cmake that does not support win32. Please see below for details:

The environment: OS: Windows Server 2016 1607 CPU: AMD EPYC 7452 32-Core Processor Compiler: msvc 14.29.30133

Describe the bug:

 87>hello_window.obj : error LNK2019: unresolved external symbol _glfwCreateWindow referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.1.hello_window.vcxproj]
    87>hello_window.obj : error LNK2019: unresolved external symbol _glfwWindowShouldClose referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.1.hello_window.vcxproj]
    87>hello_window.obj : error LNK2019: unresolved external symbol _glfwSetWindowShouldClose referenced in function "void __cdecl processInput(struct GLFWwindow *)" (?processInput@@YAXPAUGLFWwindow@@@Z) [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.1.hello_window.vcxproj]

149>hello_window_clear.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.2.hello_window_clear.vcxproj]
   149>hello_window_clear.obj : error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.2.hello_window_clear.vcxproj]
   149>hello_window_clear.obj : error LNK2019: unresolved external symbol _glfwWindowHint referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.2.hello_window_clear.vcxproj]
   149>hello_window_clear.obj : error LNK2019: unresolved external symbol _glfwCreateWindow referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.2.hello_window_clear.vcxproj]
   149>hello_window_clear.obj : error LNK2019: unresolved external symbol _glfwWindowShouldClose referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.2.hello_window_clear.vcxproj]
   149>hello_window_clear.obj : error LNK2019: unresolved external symbol _glfwSetWindowShouldClose referenced in function "void __cdecl processInput(struct GLFWwindow *)" (?processInput@@YAXPAUGLFWwindow@@@Z) [F:\JoeyDeVries\LearnOpenGL\build_x86\1.getting_started__1.2.hello_window_clear.vcxproj]

88>text_rendering.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\7.in_practice__2.text_rendering.vcxproj]
    88>text_rendering.obj : error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\7.in_practice__2.text_rendering.vcxproj]
    88>text_rendering.obj : error LNK2019: unresolved external symbol _glfwWindowHint referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\7.in_practice__2.text_rendering.vcxproj]
    88>text_rendering.obj : error LNK2019: unresolved external symbol _glfwCreateWindow referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\7.in_practice__2.text_rendering.vcxproj]
    88>text_rendering.obj : error LNK2019: unresolved external symbol _glfwWindowShouldClose referenced in function _main [F:\JoeyDeVries\LearnOpenGL\build_x86\7.in_practice__2.text_rendering.vcxproj]
    88>text_rendering.obj : error LNK2019: unresolved external symbol _glfwSetWindowShouldClose referenced in function "void __cdecl processInput(struct GLFWwindow *)" (?processInput@@YAXPAUGLFWwindow@@@Z) [F:\JoeyDeVries\LearnOpenGL\build_x86\7.in_practice__2.text_rendering.vcxproj]

To Reproduce:

1. git clone https://github.com/JoeyDeVries/LearnOpenGL
2. git -C "F:\JoeyDeVries\LearnOpenGL" rev-parse --git-dir
   git -C "F:\JoeyDeVries\LearnOpenGL" clean -xdf
   git -C "F:\JoeyDeVries\LearnOpenGL" fetch --recurse-submodules=no --force
   git -C "F:\JoeyDeVries\LearnOpenGL" reset --hard 279e6be
   git -C "F:\JoeyDeVries\LearnOpenGL" remote prune origin
3. set VSCMD_SKIP_SENDTELEMETRY=1 & "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -host_arch=x86 -arch=x86
4. cmake -G "Visual Studio 16 2019" -A win32 -DCMAKE_SYSTEM_VERSION=10.0.18362.0 -DCMAKE_BUILD_TYPE=Release ..
5. msbuild /m /p:Platform=win32 /p:Configuration=Release LearnOpenGL.sln /t:Rebuild /p:BuildInParallel=true

Note: You can also check build error messages from attached file build_x86.log

yunfeiyangcc commented 2 years ago

Please change win32 to x64. build command: cd LearnOpenGL mkdir build cd build cmake -A x64 ../ Use visual studio to open the project and compile it. @qd1332543

CatDroid commented 2 years ago

是的 因为预编译的lib/glfw3.lib 是 64bit的库