mentor93
mentor93

Reputation: 309

VS2017 throws many linker errors (LNK2001) when compiling GFLW app

I’m learning OpenGL. Since many tutorials on the Internet use GFLW I’ve decided to use GFLW, too. I’ve downloaded binaries from the official website, extracted include files and lib files for VS2017 (I’m using VS2017). Set additional paths in my project settings, so IDE knows where to find includes and libs. I linked to opengl32.lib, glew32.lib and glfw3.lib. I set project configuration as x86 Debug (and made sure I put 32-bit libraries, not 64-bit) and set runtime library as /MTd. My project settings look fine, everything should be working, but I’m constantly getting many linker errors (mostly LNK2001):

1>glfw3.lib(win32_joystick.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(wgl_context.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(egl_context.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(osmesa_context.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(win32_monitor.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(monitor.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(vulkan.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(win32_window.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(init.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(window.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(input.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(win32_init.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__calloc
1>glfw3.lib(window.obj) : error LNK2019: nierozpoznany zewnętrzny symbol __imp__strncpy przywołany w funkcji _glfwWindowHintString
1>glfw3.lib(input.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__strncpy
1>glfw3.lib(win32_joystick.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__strncpy
1>glfw3.lib(input.obj) : error LNK2019: nierozpoznany zewnętrzny symbol __imp__strcspn przywołany w funkcji _glfwUpdateGamepadMappings
1>glfw3.lib(input.obj) : error LNK2019: nierozpoznany zewnętrzny symbol __imp__strspn przywołany w funkcji _glfwUpdateGamepadMappings
1>glfw3.lib(input.obj) : error LNK2019: nierozpoznany zewnętrzny symbol __imp__realloc przywołany w funkcji _glfwUpdateGamepadMappings
1>glfw3.lib(win32_monitor.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__realloc
1>glfw3.lib(monitor.obj) : error LNK2001: nierozpoznany symbol zewnętrzny __imp__realloc
1>glfw3.lib(context.obj) : error LNK2019: nierozpoznany zewnętrzny symbol __imp____stdio_common_vsscanf przywołany w funkcji _sscanf
1>LIBCMTD.lib(exe_winmain.obj) : error LNK2019: nierozpoznany zewnętrzny symbol _WinMain@16 przywołany w funkcji "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
1>MSVCRT.lib(chandler4gs.obj) : error LNK2019: nierozpoznany zewnętrzny symbol __except_handler4_common przywołany w funkcji __except_handler4

It’s in Polish, but “nierozpoznany zewnętrzny symbol” means “unrecognized external symbol”. It looks like there’s some problem with libs, but I don’t know what - I’m linking to glfw3.lib (32-bit, vs2017), I have my project set to debug and I set /MTd. I should be able to compile the project successfully. Tried many different configurations, libs for other Visual Studio versions, but nothing works - I always get some linker errors. Could someone help me?

Upvotes: 1

Views: 519

Answers (1)

Try /MDd instead of /MTd. It looks like maybe GLFW was compiled with /MDd and it has to match.

I can infer this because __imp__ symbols are used when you link to a DLL (I don't remember the exact details). /MTd tells the linker to use the static library version of the standard library, but glfw3.lib is looking for the DLL version.

Upvotes: 1

Related Questions