【问题标题】:How to run CLion with SFML and CMake on Linux? Errors in Make and audio?如何在 Linux 上使用 SFML 和 CMake 运行 CLion?制作和音频错误?
【发布时间】:2020-06-20 22:11:55
【问题描述】:

我对在 Linux 上安装、重新排列文件和编写代码还很陌生。当被要求安装 CLion 以及 SFML 和 CMake 时,我遇到了很多问题来弄清楚如何让它们工作。我目前正在使用 Debian GNU/Linux Bullseye/sid(直接从我看到的内容中复制),所以如果有什么具体的,那也很高兴知道。

我遇到的特别问题是当我决定运行我的文件时。我收到了这些错误。

/usr/bin/ld: attempted static link of dynamic object `/home/user/Development/sfmlbuild/lib/libsfml-audio.so'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/sfml_project.dir/build.make:88: sfml_project] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/sfml_project.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/sfml_project.dir/rule] Error 2
make: *** [Makefile:118: sfml_project] Error 2

这也是我在 CMakeLists.txt 中的内容,我假设它可以找到大多数 SFML 文件,因此 CLion 可以使用它们。

cmake_minimum_required(VERSION 3.7)
set(PROJECT_NAME sfml_project)

project(${PROJECT_NAME})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -static")

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp)

if (CMAKE_BUILD_TYPE STREQUAL "Release")
    add_executable(${PROJECT_NAME} WIN32 ${SOURCE_FILES})
else ()
    add_executable(${PROJECT_NAME} ${SOURCE_FILES})
endif ()

set(SFML_ROOT "/home/user/Development/sfmlbuild")
cmake_policy(SET CMP0074 NEW)
set(SFML_STATIC_LIBRARIES FALSE)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules")
find_package(SFML  REQUIRED COMPONENTS audio graphics window system)
if (SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})
endif ()

我不确定从这里开始做什么,或者我的 CLion 设置是否有任何问题。我将我的 CMake 应用程序设置为我的 sfml_project 所在的文件夹。我的 sfmlbuild 包含从套装下载的 SFML 的 Linux 版本,位于一个单独的文件夹中,该文件夹是 libsfml-audio.so 所在的位置。至于 CLion 程序的构建、执行和开发部分,我有工具链来检测 Make、C 编译器和 C++ 编译器,我还保留了默认可用的配置文件。也许这些与错误的事情有关,但老实说,我不确定从这里该怎么做。

如果有人可以向我提供反馈,无论大小,我将不胜感激,并尽可能快地回复我是否做了某些事情。

另外很抱歉,这是我第一次使用这个网站来问任何问题,所以如果这个问题做得不好,我承认我的经验不足,我希望下次能做得更好。

---编辑更新--- 我想我应该把错误的内容也完全一样,所以我也会在这里添加它们。

对于 make[3]:错误 1

# External object files for target sfml_project
sfml_project_EXTERNAL_OBJECTS =

sfml_project: CMakeFiles/sfml_project.dir/main.cpp.o
sfml_project: CMakeFiles/sfml_project.dir/build.make
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-audio.so
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-graphics.so
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-window.so
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-system.so
sfml_project: CMakeFiles/sfml_project.dir/link.txt
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/user/CLionProjects/sfml_project/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable sfml_project"
//Line #88 is the next one which the error refers to.
    $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/sfml_project.dir/link.txt --verbose=$(VERBOSE)

对于 make[2],错误 2:

# All Build rule for target.
CMakeFiles/sfml_project.dir/all:
    $(MAKE) -f CMakeFiles/sfml_project.dir/build.make CMakeFiles/sfml_project.dir/depend
//The next line is line 76 for which error 2 occurs with make[2].
    $(MAKE) -f CMakeFiles/sfml_project.dir/build.make CMakeFiles/sfml_project.dir/build
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/user/CLionProjects/sfml_project/CMakeFiles --progress-num=1,2 "Built target sfml_project"
.PHONY : CMakeFiles/sfml_project.dir/all

对于 make[1],错误 2:

# Build rule for subdir invocation for target.
CMakeFiles/sfml_project.dir/rule: cmake_check_build_system
    $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CLionProjects/sfml_project/CMakeFiles 2
//The next line is 83 for which make[1] occurs.
    $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/sfml_project.dir/all
    $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CLionProjects/sfml_project/CMakeFiles 0
.PHONY : CMakeFiles/sfml_project.dir/rule

make错误如下,错误2:

# Build rule for target.
sfml_project: cmake_check_build_system
//The next line is 118 for the make error.
    $(MAKE) -f CMakeFiles/Makefile2 sfml_project
.PHONY : sfml_project

对于这么晚才发布所有这些信息,我深表歉意;我还是不太明白,但我希望这能提供更多信息以供帮助。

【问题讨论】:

    标签: linux cmake linker-errors sfml clion


    【解决方案1】:

    一个潜在的问题是您的 find_package 标志,正在查看我使用的项目

    find_package(SFML 2.5.1 COMPONENTS graphics audio REQUIRED)
    

    尝试输入版本号

    另一个问题,根据这个网站,SFML_ROOT 被 SFML_DIR 取代。她的网站:https://en.sfml-dev.org/forums/index.php?topic=24070.0

    【讨论】:

    • 我检查了它,并将其更改为 find_package 和 SFML_DIR,但它似乎在构建错误方面没有太大变化,除了由更改引起的 2 行差异在 find_package 中。至于那指向什么,我不知道。此外,我很抱歉,但我也更改了原始帖子以反映我获得的确切错误。我应该在创建帖子时将它们包括在内,但我对这个过程很陌生。很抱歉,我仍然感谢您的帮助。
    • 我对 Linux 上的 SFML 没有太多经验,所以我不确定这些错误到底是什么。但我确实找到了一个很好的来源,可以帮助你link
    • 好的,非常感谢你的这个o/。这实际上确实对我有帮助,我能够用它正确安装 CMake,从而运行 CLion。非常感谢。
    猜你喜欢
    • 2015-03-30
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多