将 SFML 静态库链接到项目

Linking SFML static libs to project

早上好!我正在从共享 SFML 库转向静态库。但是我有很多错误:g++ 找不到一些库。我使用了本教程:https://github.com/SFML/SFML/wiki/Tutorial%3A-Build-your-SFML-project-with-CMake。我的 CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(LastFail)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libs/)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libs/)
set(CMAKE_C_COMPILER_INIT g++)

add_definitions(-std=c++1y -w)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2 REQUIRED system window graphics network audio)

include_directories(
    include/
    libs/include/
)

file(GLOB SRC
    "src/*/*.cpp"
    "src/*.cpp"
)

add_executable(LastFail ${SRC})

target_link_libraries(LastFail
    ${CMAKE_SOURCE_DIR}/libs/libjsoncpp.a
    ${CMAKE_SOURCE_DIR}/libs/libsfml-audio-s.a
    ${CMAKE_SOURCE_DIR}/libs/libsfml-graphics-s.a
    ${CMAKE_SOURCE_DIR}/libs/libsfml-network-s.a
    ${CMAKE_SOURCE_DIR}/libs/libsfml-system-s.a
    ${CMAKE_SOURCE_DIR}/libs/libsfml-window-s.a
)

set_target_properties(LastFail PROPERTIES
    OUTPUT_NAME "LastFail"
    CLEAN_DIRECT_OUTPUT 1
)

我的小部分错误:

JoystickImpl.cpp:(.text+0x1166): undefined reference to 'udev_device_get_syspath' libs/libsfml-window-s.a(JoystickImpl.cpp.o): In function 'sf::priv::JoystickImpl::open(unsigned int)': JoystickImpl.cpp:(.text+0x19ed): undefined reference to 'udev_device_new_from_syspath'

我该如何解决?我需要做那种跨平台的方式。谢谢!

编辑:

当然,我有一个名为 libs 的目录,其中包含所有需要的库。

首先,将所有依赖项与项目本身打包在一起通常不是一个好主意,但对于类似游戏的应用程序可能会有例外。

在您的情况下,问题不在打包的 SFML 中,而是在 libudev 库中。这个图书馆是

  1. Linux-特定(非跨平台)

  2. 不能静态链接(好吧,它可能可以,但我敢打赌这是一个非常糟糕的主意,因为你链接的库可能是与 udev 守护程序不同的版本 运行在主机上)

因此,无论如何您都需要将 udev 添加到您的 target_link_libraries()