【发布时间】:2020-10-15 01:37:09
【问题描述】:
当我想通过 mingw(最新版本)使用 CMake 和 SFML 库编译项目时,我发现了很多奇怪的错误(c++)。
CMake 代码:
cmake_minimum_required(VERSION 3.0)
project(MLproject)
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER "i686-w64-mingw32-gcc")
SET(CMAKE_CXX_COMPILER "i686-w64-mingw32-g++")
SET(CMAKE_RC_COMPILER "i686-w64-mingw32-windres")
SET(CMAKE_RANLIB "i686-w64-mingw32-ranlib")
set(CMAKE_CXX_STANDARD 17)
SET(CMAKE_FIND_ROOT_PATH "/usr/i686-w64-mingw32")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(SOURCE_EXE src/main.cpp)
set(SOURCE_GAME
src/Boss/Boss.cpp
*...*
src/Game/Game.cpp)
set(SOURCE_UI
src/UI/ScrollBar/ScrollBar.cpp)
add_library(UI SHARED ${SOURCE_UI})
add_library(Game SHARED ${SOURCE_GAME})
add_executable(main ${SOURCE_EXE})
target_link_libraries(main Game UI
sfml-graphics sfml-system sfml-windos sfml-audio)
错误:
CMakeFiles/UI.dir/src/UI/ScrollBar/ScrollBar.cpp.o:ScrollBar.cpp:(.text+0x6d): undefined reference to `_imp___ZN2sf14RectangleShapeC1ERKNS_7Vector2IfEE'
CMakeFiles/UI.dir/src/UI/ScrollBar/ScrollBar.cpp.o:ScrollBar.cpp:(.text+0x399): undefined reference to `_imp___ZN2sf12RenderStates7DefaultE.....
我该如何解决?我是否因为 C++ 版本太旧而捕获错误? (Linux下一切编译成功,但我想做跨平台)
【问题讨论】:
-
如果您的
UI库(例如ScrollBar.cpp)也使用SFML,您必须将相关的SFML 库链接到UI库:target_link_libraries(UI PUBLIC sfml-graphics sfml-system sfml-windos sfml-audio)跨度> -
哦,抱歉,我应该使用 STATIC 而不是 SHARED
-
请注意,
CMAKE_SYSTEM_NAME、CMAKE_RANLIB、CMAKE_FIND_ROOT_PATH等设置通常用于toolchain files,而不是CMakeLists.txt。并设置例如CMAKE_SYSTEM_NAME在project()调用之后是完全错误的。
标签: c++ cmake compiler-errors mingw sfml