【发布时间】: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