将SFML静态库链接到项目

时间:2016-06-17 13:25:36

标签: c++ linker cmake sfml

早上好!我是从共享的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):未定义引用' udev_device_get_syspath'   libs / libsfml-window-s.a(JoystickImpl.cpp.o):在函数' sf :: priv :: JoystickImpl :: open(unsigned int)':   JoystickImpl.cpp :(。text + 0x19ed):未定义引用' udev_device_new_from_syspath'

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

修改

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 特定于Linux(不是跨平台)

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

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