提问人:Kyrbyn YT 提问时间:4/18/2023 更新时间:4/21/2023 访问量:268
如何正确静态链接SFML?(Clion、CMake、Windows 10 x64)
How to correctly link SFML staticly? (Clion, CMake, Windows 10 x64)
问:
我正在使用 CMake 静态链接 SFML,并且我收到所有 SFML 类或方法的未定义引用错误。 CmakeLists.txt(SFML位于同一目录中,并且是x64):
cmake_minimum_required(VERSION 3.22)
project(YeOldFlapper)
add_definitions(-DSFML_STATIC)
set(SFML_INCLUDE_DIR "SFML/include")
set(SFML_LIB_DIR "SFML/lib")
set(CMAKE_CXX_STANDARD 14)
include_directories(${SFML_INCLUDE_DIR})
link_directories(${SFML_LIB_DIR})
add_executable(YeOldFlapper main.cpp)
target_link_libraries(YeOldFlapper sfml-graphics-s sfml-window-s sfml-system-s)
main.cpp
#include <SFML/Graphics.hpp>
namespace SFML = sf;
int main() {
SFML::RenderWindow window(SFML::VideoMode(500, 500), "SFML WORKS!!!");
while(window.isOpen()){
SFML::Event event;
while(window.pollEvent(event)){
switch (event.type) {
case SFML::Event::Closed:
window.close();
break;
}
}
window.clear();
window.display();
}
return 0;
}
我链接得很好,但我得到了未定义的引用。
答:
0赞
Kyrbyn YT
4/18/2023
#1
OP 发现看到的链接问题是由于他混淆了他认为他正在链接的库。他以为自己正在与 MING32 SFML 链接,但发现他试图与 VC SFML 链接。
SFML 和 CMake 的文档可在此处找到:https://www.sfml-dev.org/tutorials/2.5/compile-with-cmake.php
评论
target_link_libraries(YeOldFlapper opengl32 winmm gdi32 sfml-graphics-s sfml-window-s sfml-system-s)
-lsfml-graphics-s
sfml-graphics-s
C:\Program Files\JetBrains\CLion 2022.1\bin\mingw\bin/ld.exe: C:/Users/Mokykla/CLionProjects/SFML/Projects/YeOldFlapper/main.cpp:7: undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'
.a
.lib
.a
.lib