The undefined references may look like these:
C:/msys64/mingw64/lib\libSDL2.a(SDL_windowskeyboard.o):(.text+0xf6): undefined reference to `ImmGetIMEFileNameA'
C:/msys64/mingw64/lib\libSDL2.a(SDL_windowskeyboard.o):(.text+0x144): undefined reference to `ImmGetContext'
C:/msys64/mingw64/lib\libSDL2.a(SDL_windowskeyboard.o):(.text+0x167): undefined reference to `ImmReleaseContext'
C:/msys64/mingw64/lib\libSDL2.a(SDL_windowskeyboard.o):(.text+0x1d4): undefined reference to `ImmGetCompositionStringW'
C:/msys64/mingw64/lib\libSDL2.a(SDL_windowskeyboard.o):(.text+0x1ec): undefined reference to `ImmGetCompositionStringW'
...
That's because those functions are from the dependencies of the SDL2 library, which you have neglected to link to. You can solve this by passing the following linker flags:
-lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid
Here's how to pass the flags in CMake.
find_package(SDL2 REQUIRED)
add_executable(main
main.cpp
)
target_include_directories(main
PRIVATE ${SDL2_INCLUDE_DIRS}
)
target_link_libraries(main
PRIVATE ${SDL2_LIBRARIES}
PRIVATE "-lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 \
-lole32 -loleaut32 -lshell32 -lversion -luuid"
)
Curious where the flags come from? If you're using MSYS2 and have installed it via
pacman -S mingw-w64-x86_64-SDL2
, you can check out C:\msys64\mingw64\bin\sdl2-config
.
Actually it was "sdl c++ cmake +blog"
ReplyDeleteYour page was in the top 10 on Bing!