2016-06-17 7 views
2

Guten Morgen! Ich gehe von freigegebenen SFML-Bibliotheken zu statischen. Aber ich habe viele Fehler: g++ konnte einige Bibliotheken nicht finden. Ich habe dieses Tutorial verwendet: https://github.com/SFML/SFML/wiki/Tutorial%3A-Build-your-SFML-project-with-CMake. Mein CMakeLists.txt:Verknüpfen von statischen SFML-Bibliotheken mit Projekt

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 
) 

kleiner Teil meiner Fehler:

JoystickImpl.cpp :(text + 0x1166):. Undefined Verweis auf 'udev_device_get_syspath' libs/libsfml-Fenster-sa (JoystickImpl. cpp.o): In der Funktion 'sf :: priv :: JoystickImpl :: open (unsigned int)':. JoystickImpl.cpp :(text + 0x19ed): undefined Verweis auf 'udev_device_new_from_syspath'

Wie Ich repariere das? Ich muss diesen plattformübergreifenden Weg gehen. Vielen Dank!

Edit:

Natürlich habe ich ein Verzeichnis libs mit allen benötigten Bibliotheken genannt.

+1

'undefinierter Verweis auf 'udev_device_get_syspath' bedeutet, dass Sie nicht die Bibliothek verknüpfen, in der diese Funktion definiert ist. Es ist 'libudev'. –

+0

@ MikeKinghan, danke! Aber weißt du, es gibt viele verpasste Bibliotheken. Ich brauche ein kleines cmake-Skript, um alle zu verlinken ... Und es muss ** plattformübergreifend sein. Wenn du alle Fehler sehen willst, habe ich sie alle eingefügt: http://pastebin.com/erfnieXC. –

+0

'Und es muss plattformübergreifend sein. - Was bedeutet das, wenn Sie ** Bibliotheken mit Ihrem Projekt geliefert haben **? Möchten Sie alle Bibliotheken für ** alle möglichen Plattformen ** mit Ihrem Projekt bereitstellen? Oder was? Was ist eigentlich eine Frage/ein Problem? – Tsyvarev

Antwort

0

Erstens ist es im Allgemeinen eine schlechte Idee, alle Abhängigkeiten mit dem Projekt selbst zu packen, aber für spielähnliche Anwendungen könnte es Ausnahmen geben.

In Ihrem Fall ist das Problem nicht in SFML verpackt, aber libudev Bibliothek. Diese Bibliothek ist

  1. Linux-spezifisch (nicht plattformübergreifend)

  2. nicht statisch verknüpft werden können (na ja, es könnte wahrscheinlich, aber ich wette, es eine sehr schlechte Idee ist, weil Bibliothek Sie verknüpft in könnten andere Version sein, die udev-Daemon auf dem Host-Computer ausgeführt wird)

So müssen Sie udev zu Ihrem target_link_libraries() sowieso hinzuzufügen.

+0

Ich brauche eine Art cmake-Skript, um ** alle ** Abhängigkeiten zu verknüpfen/Ich bin nicht in der Lage, das selbst zu tun. –

+0

Dieses "Skript" listet alle Ihre Abhängigkeiten in diesem 'target_link_libraries()' Aufruf auf. – arrowd

+0

Können Sie mir bitte helfen? Ich weiß eigentlich nichts über CMake-Dateien. –