I need help trying to compile a simple example for GLFW with MinGW

c++, g++, glfw, mingw, windows

Solution

The order the library as it appears in the command line is important for gcc as well as the library search paths to look in. Try moving `-lglfw3` to the end and add the current directory to the search path using `-L`.

eg.

g++ -Iinclude test.cpp -o test.exe -L . -lglfw3

Edit1: From looking at the verbose status output, it seems `libglfw3.a` that you have isn't compatible with the mingw gcc you're using. Luckily, the `ld` linker can work with dll files directly. See if the following works:

g++ -Iinclude test.cpp -o test.exe .\glfw3.dll

The alternative would be to create an import library from `glfw3.dll` using mingw gcc that you have. This is a bit more involved since you'd need create a `.def` file followed with a call to dlltool.

Edit2: The mingw gcc you're using is a 64-bit windows compiler. Make sure you're using the correct glfw3 64-bit library and not the 32-bit version. GLFW download section.

Problem

I am trying to compile an example from GLFW's documentation. My folder structure for the libraries and source files are: C:\cpp\ glfw3.dll glfw3dll.a libglfw3.a test.cpp include\ GLFW\ glfw3.h glfw3native.h ``` #include <GLFW/glfw3.h> int main(void) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; } ``` I'm trying to compile it with this command ``` c:\cpp>x86_64-w64-mingw32-g++ -lglfw3 -Iinclude test.cpp -o test ``` but I get this error: ``` c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglfw3 collect2.exe: error: ld returned 1 exit status ``` -v outputs: ``` Using built-in specs. COLLECT_GCC=x86_64-w64-mingw32-g++ COLLECT_LTO_WRAPPER=c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-ming w32/4.7.2/lto-wrapper.exe Target: x86_64-w64-mingw32 Configured with: ../gcc-4.7.2-mingw/configure --host=x86_64-w64-mingw32 --build= x86_64-unknown-linux-gnu --target=x86_64-w64-mingw32 --prefix=/home/gfortran/gcc -home/binary/mingw32/native/x86_64/gcc/4.7.2 --with-sysroot=/home/gfortran/gcc-h ome/binary/mingw32/cross/x86_64/gcc/4.7.2 --with-gcc --with-gnu-ld --with-gnu-as --with-gmp=/home/gfortran/gcc-home/binary/mingw32/native/x86_64/gmp --with-mpfr =/home/gfortran/gcc-home/binary/mingw32/native/x86_64/mpfr --with-mpc=/home/gfor tran/gcc-home/binary/mingw32/native/x86_64/mpc --with-cloog=/home/gfortran/gcc-h ome/binary/mingw32/native/x86_64/cloog --with-ppl=/home/gfortran/gcc-home/binary /mingw32/native/x86_64/ppl --with-host-libstdcxx='-lstdc++ -lsupc++ -lm' --enabl e-cloog-backend=ppl --enable-targets=i686-w64-mingw32,x86_64-w64-mingw32 --enabl e-lto --enable-languages=c,c++,fortran --enable-libgomp --enable-threads=win32 - -enable-static --enable-shared=lto-plugin --enable-plugins --enable-ld=yes --ena ble-libquadmath --enable-libquadmath-support --disable-nls --disable-tls --disab le-win32-registry Thread model: win32 gcc version 4.7.2 (GCC) COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march =x86-64' c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.7.2/cc1plus.e xe -quiet -v -I include -iprefix c:\users\username\gcc\bin\../lib/gcc/x86_64 -w64-mingw32/4.7.2/ -U_REENTRANT test.cpp -quiet -dumpbase test.cpp -mtune=gener ic -march=x86-64 -auxbase test -version -o C:\Users\username~1.ADM\AppData\Local\T emp\ccfe85gV.s GNU C++ (GCC) version 4.7.2 (x86_64-w64-mingw32) compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.0.0, MPC version 0.9 warning: GMP header version 5.0.5 differs from library version 5.0.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2" ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/x86_64-w64-mingw32" ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/backward" ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 6_64-w64-mingw32/4.7.2/include" ignoring nonexistent directory "/home/gfortran/gcc-home/binary/mingw32/cross/x86 _64/gcc/4.7.2/home/gfortran/gcc-home/binary/mingw32/native/x86_64/gcc/4.7.2/lib/ gcc/x86_64-w64-mingw32/4.7.2/../../../../include" ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 6_64-w64-mingw32/4.7.2/include-fixed" ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 6_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/include" ignoring nonexistent directory "/home/gfortran/gcc-home/binary/mingw32/cross/x86 _64/gcc/4.7.2/mingw/include" #include "..." search starts here: #include <...> search starts here: include c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i nclude/c++/4.7.2 c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i nclude/c++/4.7.2/x86_64-w64-mingw32 c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i nclude/c++/4.7.2/backward c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/include c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/include-fixed c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x 86_64-w64-mingw32/include End of search list. GNU C++ (GCC) version 4.7.2 (x86_64-w64-mingw32) compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.0.0, MPC version 0.9 warning: GMP header version 5.0.5 differs from library version 5.0.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 0b3cd9e378660c38a8a80567400ff92f COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march =x86-64' c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x 86_64-w64-mingw32/bin/as.exe -v -I include -o C:\Users\username~1.ADM\AppData\Loca l\Temp\ccQqklHV.o C:\Users\username~1.ADM\AppData\Local\Temp\ccfe85gV.s GNU assembler version 2.22.52 (x86_64-w64-mingw32) using BFD version (GNU Binuti ls) 2.22.52.20120723 COMPILER_PATH=c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4. 7.2/;c:/users/username/gcc/bin/../libexec/gcc/;c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/ EQ_LIBRARY_PATH=c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7. 2/;c:/users/username/gcc/bin/../lib/gcc/;C:/Users/username/gcc/x86_64-w6 4-mingw32/lib/../lib/;c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw3 2/4.7.2/../../../../x86_64-w64-mingw32/lib/../lib/;c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/;C:/Users/username/gcc/ x86_64-w64-mingw32/lib/;c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-ming w32/4.7.2/../../../../x86_64-w64-mingw32/lib/;c:/users/username/gcc/bin/../l ib/gcc/x86_64-w64-mingw32/4.7.2/../../../ COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march =x86-64' c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.7.2/collect2. exe --sysroot=/home/gfortran/gcc-home/binary/mingw32/cross/x86_64/gcc/4.7.2 -m i 386pep -Bdynamic -o test.exe C:/Users/username/gcc/x86_64-w64-mingw32/lib/.. /lib/crt2.o C:/Users/username/gcc/x86_64-w64-mingw32/lib/../lib/crtbegin.o - Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2 -Lc:/users/ username/gcc/bin/../lib/gcc -LC:/Users/username/gcc/x86_64-w64-mingw32/lib /../lib -Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../. ./../../x86_64-w64-mingw32/lib/../lib -Lc:/users/username/gcc/bin/../lib/gcc /x86_64-w64-mingw32/4.7.2/../../../../lib -LC:/Users/username/gcc/x86_64-w64 -mingw32/lib -Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2 /../../../../x86_64-w64-mingw32/lib -Lc:/users/username/gcc/bin/../lib/gcc/x 86_64-w64-mingw32/4.7.2/../../.. C:\Users\username~1.ADM\AppData\Local\Temp\ccQqkl HV.o -lglfw3 -lstdc++ -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 - lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt C:/Us ers/username/gcc/x86_64-w64-mingw32/lib/../lib/crtend.o c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/libglfw3.a when searching f or -lglfw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/glfw3.dll when searching fo r -lglfw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib\libglfw3.a when searching f or -lglfw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../libglfw3.a when searching for -lgl fw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../glfw3.dll when searching for -lglf w3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../..\libglfw3.a when searching for -lgl fw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/libglfw3.a when searching f or -lglfw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/glfw3.dll when searching fo r -lglfw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../libglfw3.a when searching for -lgl fw3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin /../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../glfw3.dll when searching for -lglf w3 c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: cannot find -lglfw3 collect2.exe: error: ld returned 1 exit status ``` c:\cpp>x86_64-w64-mingw32-g++ -Iinclude test.cpp -o test .\glfw3.dll ``` c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `.\glfw3.dll' is in compatible with i386:x86-64 output C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0xe): undefi ned reference to `glfwInit' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x43): undef ined reference to `glfwCreateWindow' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x53): undef ined reference to `glfwTerminate' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x66): undef ined reference to `glfwMakeContextCurrent' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x74): undef ined reference to `glfwSwapBuffers' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x79): undef ined reference to `glfwPollEvents' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x85): undef ined reference to `glfwWindowShouldClose' C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x93): undef ined reference to `glfwTerminate' c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o : bad reloc address 0x0 in section `.pdata' c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 6_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status ```

Original source