I am trying to create a simple SDL2 game with CMake and MSYS Makefiles.
I want to statically link SDL2 so that I can distribute a single executable file without having to include SDL2.dll.
Here is my CMakeLists.txt file:
project(racer-sdl) cmake_minimum_required(VERSION 2.8) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_EXE_LINKER_FLAGS "-static") include(FindPkgConfig) pkg_search_module(SDL2 sdl2) if (SDL2_FOUND) message(STATUS "Using SDL2") add_definitions(-DUSE_SDL2) include_directories(${SDL2_INCLUDE_DIRS}) link_directories(${SDL2_LIBRARY_DIRS}) link_libraries(${SDL2_LIBRARIES}) else () message(FATAL_ERROR "Missing SDL2") endif () file(GLOB SOURCE_FILES src/*.cpp src/*.hpp) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES})
I can build perfectly without the -static flag, but with it I get a long list of undefined links.
c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:58: undefined reference to ` _imp__timeBeginPeriod@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:52: undefined reference to ` _imp__timeEndPeriod@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:58: undefined reference to ` _imp__timeBeginPeriod@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `SDL_TicksInit': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:106: undefined reference to ` _imp__timeGetTime@0 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:52: undefined reference to ` _imp__timeEndPeriod@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:52: undefined reference to ` _imp__timeEndPeriod@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `SDL_GetTicks_REAL': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:159: undefined reference to ` _imp__timeGetTime@0 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:58: undefined reference to ` _imp__timeBeginPeriod@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `SDL_TicksInit': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:106: undefined reference to ` _imp__timeGetTime@0 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:52: undefined reference to ` _imp__timeEndPeriod@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `SDL_GetTicks_REAL': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:159: undefined reference to ` _imp__timeGetTime@0 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:58: undefined reference to ` _imp__timeBeginPeriod@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `SDL_TicksInit': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:106: undefined reference to ` _imp__timeGetTime@0 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/timer/windows/SDL_systimer.c:52: undefined reference to ` _imp__timeEndPeriod@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_SetupAPI': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:596: undefined reference to ` ImmGetIMEFileNameA@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:609: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:612: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetId': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:530: undefined reference to ` ImmGetIMEFileNameA@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:545: undefined reference to ` GetFileVersionInfoSizeA@8 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:549: undefined reference to ` GetFileVersionInfoA@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:550: undefined reference to ` VerQueryValueA@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_ClearComposition': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:662: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:666: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:670: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:671: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_Disable': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:344: undefined reference to ` ImmAssociateContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_ClearComposition': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:668: undefined reference to ` ImmSetCompositionStringW@24 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:662: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:666: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:670: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:671: undefined reference to ` ImmReleaseContext@8 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:668: undefined reference to ` ImmSetCompositionStringW@24 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_Init': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:303: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:304: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetId': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:530: undefined reference to ` ImmGetIMEFileNameA@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:545: undefined reference to ` GetFileVersionInfoSizeA@8 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:549: undefined reference to ` GetFileVersionInfoA@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetReadingString': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:402: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:477: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetId': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:550: undefined reference to ` VerQueryValueA@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_Quit': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:358: undefined reference to ` ImmAssociateContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_Enable': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:329: undefined reference to ` ImmAssociateContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_ClearComposition': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:662: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:666: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:670: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:671: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_Disable': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:344: undefined reference to ` ImmAssociateContext@8 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:668: undefined reference to ` ImmSetCompositionStringW@24 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_HandleMessage': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:834: undefined reference to ` ImmGetContext@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetCompositionString': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:678: undefined reference to ` ImmGetCompositionStringW@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:683: undefined reference to ` ImmGetCompositionStringW@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_HandleMessage': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:872: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_ClearComposition': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:662: undefined reference to ` ImmGetContext@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:666: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:670: undefined reference to ` ImmNotifyIME@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:671: undefined reference to ` ImmReleaseContext@8 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_HandleMessage': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:867: undefined reference to ` ImmGetContext@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetCandidateList': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:746: undefined reference to ` ImmGetCandidateListW@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetCompositionString': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:678: undefined reference to ` ImmGetCompositionStringW@16 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:683: undefined reference to ` ImmGetCompositionStringW@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_InputLangChanged': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:668: undefined reference to ` ImmSetCompositionStringW@24 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_windowskeyboard.o): In function `IME_GetCandidateList': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/video/windows/SDL_windowskeyboard.c:750: undefined reference to ` ImmGetCandidateListW@16 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `WINMM_CloseDevice': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:172: undefined reference to ` _imp__waveOutUnprepareHeader@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:172: undefined reference to ` _imp__waveOutUnprepareHeader@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:184: undefined reference to ` _imp__waveInClose@4 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:189: undefined reference to ` _imp__waveOutClose@4 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `WINMM_PlayDevice': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:133: undefined reference to ` _imp__waveOutWrite@12 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `DetectWaveOutDevs': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:55: undefined reference to ` _imp__waveOutGetNumDevs@0 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:55: undefined reference to ` _imp__waveOutGetDevCapsW@12 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `DetectWaveInDevs': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:56: undefined reference to ` _imp__waveInGetNumDevs@0 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:56: undefined reference to ` _imp__waveInGetDevCapsW@12 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `WINMM_OpenDevice': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:235: undefined reference to ` _imp__waveInGetNumDevs@0 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:238: undefined reference to ` _imp__waveInGetDevCapsW@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:316: undefined reference to ` _imp__waveInOpen@24 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:366: undefined reference to ` _imp__waveOutPrepareHeader@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:248: undefined reference to ` _imp__waveOutGetNumDevs@0 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:251: undefined reference to ` _imp__waveOutGetDevCapsW@12 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `PrepWaveFormat': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:218: undefined reference to ` _imp__waveOutOpen@24 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:216: undefined reference to ` _imp__waveInOpen@24 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `WINMM_OpenDevice': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:320: undefined reference to ` _imp__waveOutOpen@24 ' c:/SDL2-2.0.3/i686-w64-mingw32/lib\libSDL2.a(SDL_winmm.o): In function `SetMMerror': /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:108: undefined reference to ` _imp__waveOutGetErrorTextW@12 ' /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/audio/winmm/SDL_winmm.c:108: undefined reference to ` _imp__waveOutGetErrorTextW@12 ' collect2.exe: error: ld returned 1 exit status make[2]: *** [racer-sdl.exe] Error 1 make[1]: *** [CMakeFiles/racer-sdl.dir/all] Error 2 make: *** [all] Error 2
source share