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
的目录,其中包含所有需要的库。
答案 0 :(得分:0)
首先,将所有依赖项打包到项目本身通常是一个坏主意,但对于类似游戏的应用程序,可能会有例外。
在您的情况下,问题不在打包的SFML中,而是在libudev
库中。这个库是
特定于Linux(不是跨平台)
无法静态链接(好吧,它可能会,但我敢打赌这是一个非常糟糕的主意,因为你链接的库可能是与主机上运行的udev守护程序不同的版本)
因此,无论如何,您需要将udev
添加到target_link_libraries()
。