2016-06-17 28 views
2

おはようございます!共有SFMLライブラリから静的ライブラリに移行しています。しかし、私は多くのエラーがあります:g++いくつかのライブラリを見つけることができませんでした。私はこのチュートリアルを使った:https://github.com/SFML/SFML/wiki/Tutorial%3A-Build-your-SFML-project-with-CMake。マイCMakeLists.txtプロジェクトにSFML静的ライブラリをリンクする

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 :(テキスト+ 0x1166): 'udev_device_get_syspath' のlibs/libsfml-ウィンドウ-SAへの未定義の参照(JoystickImpl。 cpp.o):関数 'SF :: PRIV :: JoystickImpl ::オープン(unsigned int型)' は、:。 JoystickImpl.cpp :(テキスト+ 0x19ed): 'udev_device_new_from_syspath' を実行する方法

への未定義参照私はそれを修正する?私はそれをクロスプラットフォームの方法で行う必要があります。ありがとう!

編集:もちろん

、私はすべての必要なライブラリとlibsというディレクトリがあります。

+1

'未定義の 'udev_device_get_syspath'への参照は、その関数が定義されているライブラリをリンクしていないことを意味します。これは 'libudev'です。 –

+0

@MikeKinghan、ありがとう!しかし、あなたが知っている、多くの欠けているライブラリがあります。それらをすべてリンクするためのcmakeスクリプトが必要です...そして、**それはクロスプラットフォームでなければなりません。すべてのエラーを表示したい場合は、それらをすべて貼り付けました:http://pastebin.com/erfnieXC。 –

+0

'それはクロスプラットフォームでなければなりません。 - あなたのプロジェクトに**ライブラリが同梱されている場合、どういう意味でしょうか? **すべての可能性のあるプラットフォーム**のライブラリをすべてあなたのプロジェクトに同梱したいですか?または何?実際問題とは何ですか? – Tsyvarev

答えて

0

まず、プロジェクト自体のすべての依存関係をパッケージ化することは一般的には悪い考えですが、ゲームのようなアプリケーションでは例外が発生する可能性があります。

あなたのケースでは、問題はパッケージ化されたSFMLではなく、libudevライブラリです。このライブラリは、

  1. Linux固有(ないクロスプラットフォーム)

  2. 、(まあ、それはおそらくできたが、私は、それは非常に悪い考えです賭ける静的にリンクすることはできませんあなたのライブラリ理由udevは、ホストマシン上で動作しているデーモンの異なるバージョン)

の可能性がでリンクだから、あなたはとにかく自分のtarget_link_libraries()udevを追加する必要があります。

+0

**すべての**依存関係をリンクするためのcmakeスクリプトが必要です/私は自分自身を行うことができません。 –

+0

この "script"は、基本的に 'target_link_libraries()'呼び出しのすべての依存関係をリストしています。 – arrowd

+0

私を助けてもらえますか?私は実際にはcmakeファイルについて何も知らない。 –

関連する問題