MingW Static Library Linking - SFML 2.1

I am trying to get SFML 2.1 to work with MingW, but this is causing problems.

my compiling line in the MingW compiler:

g++ -ID:\SFML-2.1\include -LD:\SFML-2.1\lib main.cpp -lsfml-graphics -lsfml-window -lsfml-system 

I am trying to link .a files (does this mean that I have to add soemthing tot eh compile line?).

The code is as follows:

 #include <SFML/Graphics.hpp> int main() { // create the window sf::RenderWindow window(sf::VideoMode(800, 600), "My window"); // run the program as long as the window is open while (window.isOpen()) { // check all the window events that were triggered since the last iteration of the loop sf::Event event; while (window.pollEvent(event)) { // "close requested" event: we close the window if (event.type == sf::Event::Closed) window.close(); } // clear the window with black color window.clear(sf::Color::White); // draw everything here... // window.draw(...); // end the current frame window.display(); } return 0; } 

when I try to compile, I get the following errors:

 $ make main g++ -ID:\SFML-2.1\include -LD:\SFML-2.1\lib main.cpp -lsfml-graphics -lsfml-wind ow -lsfml-system C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0xe5): undefined r eference to `_imp___ZN2sf6StringC1EPKcRKSt6locale' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x10b): undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x147): undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15Co ntextSettingsE' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x178): undefined reference to `_imp___ZN2sf6Window5closeEv' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x18d): undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x1a4): undefined reference to `_imp___ZN2sf5Color5WhiteE' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x1ae): undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x1c0): undefined reference to `_imp___ZN2sf6Window7displayEv' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x1cf): undefined reference to `_imp___ZNK2sf6Window6isOpenEv' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x1e7): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x20e): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev' C:\Users\Junker\AppData\Local\Temp\ccapaUOM.o:main.cpp:(.text+0x235): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev' c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\J unker\AppData\Local\Temp\ccapaUOM.o: bad reloc address 0xf in section `.text$_ZN 2sf6StringD1Ev[__ZN2sf6StringD1Ev]' c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status make: *** [main] Error 1 

what am I doing wrong? the errors say an undefined link, which means there is something (a library?) that cannot be found.

The SFML 2.1 package comes with debug and release libraries (libsfml - sd), is there something related to this?

+6
source share
2 answers

All requirements are described in the FAQ :

  • Add the preprocessor flag -DSFML_STATIC ,

  • Use library files marked with -s : -lsfml-graphics-s instead of -lsfml-graphics ,

  • Add every needed static library: -lopengl32 -lwinmm -lgdi32 is minimal when using graphic, window and system modules.

A simple makefile would look like this:

 EXE := static.exe SRC := $(wildcard *.cpp) OBJ := $(SRC:.cpp=.o) DEP := $(OBJ:.o=.d) CPPFLAGS := -Ipath/to/SFML/include -MMD -MP -DSFML_STATIC CXXFLAGS := -std=c++11 -Wall -W -pedantic LDFLAGS := -Lpath/to/SFML/lib LDLIBS := -lsfml-graphics-s -lsfml-window-s -lsfml-system-s LDLIBS += -lopengl32 -lwinmm -lgdi32 .PHONY: all clean all: $(EXE) $(EXE): $(OBJ) $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ clean: $(RM) $(EXE) $(OBJ) $(DEP) ifeq "$(MAKECMDGOALS)" "" -include $(DEP) endif 

To remove the console, add the -mwindows linker -mwindows to LDFLAGS .

+2
source

You are linking to dynamic libraries to run, so change them to static libraries by adding -s to the libraries.

You will also need to add the SFML_STATIC preprocessor.

 g++ -DSFML_STATIC -ID:\SFML-2.1\include -LD:\SFML-2.1\lib main.cpp -lsfml-graphics-s -lsfml-window-s -lsfml-system-s 

At least you will be referring to a static release library.

+2
source

All Articles