出现此问题的环境:Clion、MinGW、vcpkg
我的CMakeLists 文件如下:
cmake_minimum_required(VERSION 3.27)
project(stu)
set(CMAKE_CXX_STANDARD 17)
# 查找 SFML 库
find_package(SFML 2.6.1 COMPONENTS graphics window system REQUIRED)
# 添加可执行文件
add_executable(sfml src/sfml/test.cpp )
# 链接 SFML 动态库
target_link_libraries(sfml PRIVATE
sfml-graphics
sfml-window
sfml-system
)
代码如下:
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Window");
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.clear(sf::Color::Black);
sf::CircleShape circle(50.0f);
circle.setFillColor(sf::Color::Red);
circle.setPosition(375.0f, 275.0f);
window.draw(circle);
window.display();
}
return 0;
}
以上代码运行会出现以下报错:
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: CMakeFiles\sfml.dir/objects.a(test.cpp.obj): in function `main':
D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:8: undefined reference to `__imp__ZN2sf6StringC1EPKcRKSt6locale'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:8: undefined reference to `__imp__ZN2sf9VideoModeC1Ejjj'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:8: undefined reference to `__imp__ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:14: undefined reference to `__imp__ZN2sf6Window5closeEv'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:12: undefined reference to `__imp__ZN2sf10WindowBase9pollEventERNS_5EventE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:18: undefined reference to `__imp__ZN2sf5Color5BlackE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:18: undefined reference to `__imp__ZN2sf12RenderTarget5clearERKNS_5ColorE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:20: undefined reference to `__imp__ZN2sf11CircleShapeC1Efy'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:21: undefined reference to `__imp__ZN2sf5Color3RedE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:21: undefined reference to `__imp__ZN2sf5Shape12setFillColorERKNS_5ColorE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:22: undefined reference to `__imp__ZN2sf13Transformable11setPositionEff'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:23: undefined reference to `__imp__ZN2sf12RenderStates7DefaultE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:23: undefined reference to `__imp__ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:25: undefined reference to `__imp__ZN2sf6Window7displayEv'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:10: undefined reference to `__imp__ZNK2sf10WindowBase6isOpenEv'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:29: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/src/sfml/test.cpp:29: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: CMakeFiles\sfml.dir/objects.a(test.cpp.obj): in function `sf::CircleShape::~CircleShape()':
D:/pri/Project/C++/Cpp_stu/cmake-build-mingw/vcpkg_installed/x64-windows/include/SFML/Graphics/CircleShape.hpp:41: undefined reference to `__imp__ZTVN2sf11CircleShapeE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/cmake-build-mingw/vcpkg_installed/x64-windows/include/SFML/Graphics/CircleShape.hpp:41: undefined reference to `__imp__ZTVN2sf11CircleShapeE'
D:\Program Files\JetBrains\CLion Nova\bin\mingw\bin/ld.exe: D:/pri/Project/C++/Cpp_stu/cmake-build-mingw/vcpkg_installed/x64-windows/include/SFML/Graphics/CircleShape.hpp:41: undefined reference to `__imp__ZN2sf5ShapeD2Ev'
collect2.exe: error: ld returned 1 exit status
mingw32-make[3]: *** [CMakeFiles\sfml.dir\build.make:102: sfml.exe] Error 1
mingw32-make[2]: *** [CMakeFiles\Makefile2:446: CMakeFiles/sfml.dir/all] Error 2
mingw32-make[1]: *** [CMakeFiles\Makefile2:453: CMakeFiles/sfml.dir/rule] Error 2
mingw32-make: *** [Makefile:292: sfml] Error 2
经尝试后发现生成器使用MinGW Makefiles或者Ninja会出现此问题,更换成NMake Makefiles则可以正常运行代码