【发布时间】:2016-10-19 08:44:12
【问题描述】:
早上好!我正在从共享的 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): undefined reference to 'udev_device_new_from_syspath'
我该如何解决这个问题?我需要做那种跨平台的方式。谢谢!
编辑:
当然,我有一个名为 libs 的目录,其中包含所有需要的库。
【问题讨论】:
-
` undefined reference to 'udev_device_get_syspath` 意味着您没有链接定义该函数的库。是
libudev。 -
@MikeKinghan,谢谢!但是你知道,有很多遗漏的库。我需要一种 cmake 脚本来链接它们……而且它必须是跨平台的。如果您想查看所有错误,我已将它们全部粘贴:pastebin.com/erfnieXC。
-
And it must be cross-platform.- 如果您有项目附带的库,这意味着什么?您想为您的项目提供所有可能的平台的所有库吗?要不然是啥?实际上什么是问题/问题? -
我想在我的项目中使用 SFML 和 json-cpp,这样每个人都可以从盒子里得到它。但是如何用 cmake 做到这一点?
-
我需要为 sfml 链接所有需要的库,如果它是 linux 的话。