2017-03-07 6 views
-1

私はSqAtxのGitHubリポジトリSuperMarioWorldを私のUbuntu 16.04(64bit)マシンにクローンしました。彼のプロジェクトを理解し、彼がこの試合をした方法で学ぶためにスーパーマリオのクローンを実行したいと思います。メイクエラーメッセージの理解

まず、README.mdで説明したように、私はそれをコンパイルできませんでした。しかし、私は同じ方法で(Cmake、make、SFML、そしてCコンパイラが正しくインストールされたことを伝えています)独自のBattleshipゲームを正常にコンパイルしました。エラーとして、私は、ビルドフォルダからcmake ..を実行した後、このエラーメッセージが表示されました:それは成功したメイクファイルを作成するよう

CMake Error at CMakeLists.txt:24 (add_executable): 
add_executable called with incorrect number of arguments 


-- Found SFML 2.4.0 in /usr/include 
CMake Error at CMakeLists.txt:32 (target_link_libraries): 
Cannot specify link libraries for target "SuperMarioWorld" which is not 
built by this project. 


-- Configuring incomplete, errors occurred! 

は、私は、彼のCMakeList.txtを修正しました。私のCMakeList.txtは次のようになります:

#Change this if you need to target a specific CMake version 
cmake_minimum_required (VERSION 2.6) 

# Enable debug symbols by default 
# must be done before project() statement 
if(NOT CMAKE_BUILD_TYPE) 
    set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build (Debug or Release)" FORCE) 
endif() 

project (SuperMarioWorld) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -Wall -g") 

# I guess you have not released the project yet :p 
set (SuperMarioWorld_VERSION_MAJOR 0) 
set (SuperMarioWorld_VERSION_MINOR 1) 
set (SuperMarioWorld_VERSION_PATCH 0) 

include_directories("${PROJECT_BINARY_DIR}") 
set(SOURCE_FILES 
    EventEngine/Listeners/CharacterDiedListener.cpp 
    EventEngine/Listeners/CharacterPositionUpdateListener.cpp 
    EventEngine/Listeners/CloseRequestListener.cpp 
    EventEngine/Listeners/DebugInfoUpdatedListener.cpp 
    EventEngine/Listeners/ForegroundItemRemovedListener.cpp 
    EventEngine/Listeners/ForegroundItemUpdatedListener.cpp 
    EventEngine/Listeners/GotLevelInfoListener.cpp 
    EventEngine/Listeners/KeyboardListener.cpp 
    EventEngine/Listeners/LevelStartListener.cpp 
    EventEngine/Listeners/MarioJumpListener.cpp 
    EventEngine/Listeners/MarioKickedEnemyListener.cpp 
    EventEngine/Listeners/NewCharacterReadListener.cpp 
    EventEngine/Listeners/NewForegroundItemReadListener.cpp 
    EventEngine/Listeners/NewPipeReadListener.cpp 
    EventEngine/Listeners/ToggleIgnoreInputListener.cpp 
    EventEngine/EventEngine.cpp 
    Game/CollisionHandler.cpp 
    Game/GameEngine.cpp 
    Game/LevelImporter.cpp 
    Graphics/GraphicsEngine.cpp 
    Graphics/SpriteHandler.cpp 
    Sound/SoundEngine.cpp 
    SuperMario/Game.cpp 
    SuperMario/main.cpp 
    System/Characters/Enemy.cpp 
    System/Characters/Goomba.cpp 
    System/Characters/MovingObject.cpp 
    System/Characters/Player.cpp 
    System/Items/Box.cpp 
    System/Items/Pipe.cpp 
    System/irrXML/irrXML.cpp 
    System/Engine.cpp 
    System/Util.cpp 
) 
# Define sources and executable 
set (EXECUTABLE_NAME "SuperMarioWorld") 
add_executable(${EXECUTABLE_NAME} ${SOURCE_FILES}) 

# Detect and add SFML 
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/lib" ${CMAKE_MODULE_PATH}) 
#Find any version 2.X of SFML 
#See the FindSFML.cmake file for additional details and instructions 
find_package(SFML 2 REQUIRED system window graphics network audio) 
if(SFML_FOUND) 
    include_directories(${SFML_INCLUDE_DIR}) 
    target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES}) 
endif() 

# Install target 
install(TARGETS ${EXECUTABLE_NAME} DESTINATION bin) 

このCMakeList.txtでは、私は正常にメイクファイルを作成することができました。

/home/lex/Documents/cs/games/SuperMarioWorld/EventEngine/Listeners/NewForegroundItemReadListener.cpp:21:95: error: taking address of temporary [-fpermissive] 
m_graphicsEngine->UpdateForegroundItem(&(_event->GetDisplayableObject()->GetInfoForDisplay())); 

だから私は24行目NewPipeReadListener.cppでそれを修正しなければならなかったし、ライン24上のNewForegroundItemReadListener.cppに、私はこのようにそれを固定:

InfoForDisplay temp = _event->GetPipe()->GetInfoForDisplay(); 
m_graphicsEngine->UpdateForegroundItem(&temp); 
私が最初の場所に同じ2つのエラーを得たメイクを実行します

今、メイクファイルは、私が言葉を理解していないので、私は修正できないエラーを私に与える...私はここに全体のエラーメッセージを含めるが、Stackoverflowはそうすることを許可していない...
しかしそれはこのように始まります。

[ 2%] Linking CXX executable SuperMarioWorld 
CMakeFiles/SuperMarioWorld.dir/EventEngine/Listeners/KeyboardListener.cpp.o: In function `KeyboardListener::onEvent(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Event*)': 
/home/lex/Documents/cs/games/SuperMarioWorld/EventEngine/Listeners/KeyboardListener.cpp:12: undefined reference to `KeyboardEvent::GetType()' 
/home/lex/Documents/cs/games/SuperMarioWorld/EventEngine/Listeners/KeyboardListener.cpp:13: undefined reference to `KeyboardEvent::GetKey()' 
/home/lex/Documents/cs/games/SuperMarioWorld/EventEngine/Listeners/KeyboardListener.cpp:14: undefined reference to `KeyboardEvent::GetType()' 
/home/lex/Documents/cs/games/SuperMarioWorld/EventEngine/Listeners/KeyboardListener.cpp:15: undefined reference to `KeyboardEvent::GetKey()' 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o: In function `CollisionHandler::HandleCollisionsWithMapEdges(MovingObject&)': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:25: undefined reference to `DisplayableObject::GetCoordinates() const' 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o: In function `CollisionHandler::DetectCollisionWithObj(MovingObject&, DisplayableObject&)': 

誰かがこのエラーを理解し、可能であれば私のシステムでプロジェクトを実行できるように助けてくれたら嬉しいです。

EDIT: EventEngine/KeyboardEvent.cppを含めた最初のエラーを修正した後、それを100%にリンクし、次のエラーメッセージを出してくれる:

[100%] Linking CXX executable SuperMarioWorld 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o: In function `CollisionHandler::HandleCollisionsWithMapEdges(MovingObject&)': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:25: undefined reference to `DisplayableObject::GetCoordinates() const' 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o: In function `CollisionHandler::DetectCollisionWithObj(MovingObject&, DisplayableObject&)': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:40: undefined reference to `DisplayableObject::GetCoordinates() const' 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:40: undefined reference to `DisplayableObject::GetCoordinates() const' 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o: In function `CollisionHandler::ReactToCollisionsWithObj(MovingObject&, DisplayableObject&, CollisionDirection)': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:45: undefined reference to `DisplayableObject::GetCoordinates() const' 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o: In function `CollisionHandler::HandleCollisionWithRect(unsigned int, sf::Rect<float>)': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:73: undefined reference to `DisplayableObject::GetCoordinates() const' 
CMakeFiles/SuperMarioWorld.dir/Game/CollisionHandler.cpp.o:/home/lex/Documents/cs/games/SuperMarioWorld/Game/CollisionHandler.cpp:138: more undefined references to `DisplayableObject::GetCoordinates() const' follow 
CMakeFiles/SuperMarioWorld.dir/Game/GameEngine.cpp.o: In function `GameEngine::UpdateForegroundItem(unsigned int, sf::Rect<float>)': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/GameEngine.cpp:114: undefined reference to `DisplayableObject::SetCoordinates(sf::Rect<float>)' 
CMakeFiles/SuperMarioWorld.dir/Game/LevelImporter.cpp.o: In function `LevelImporter::StoreFloor()': 
/home/lex/Documents/cs/games/SuperMarioWorld/Game/LevelImporter.cpp:180: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, State)' 
CMakeFiles/SuperMarioWorld.dir/System/Characters/MovingObject.cpp.o: In function `MovingObject::MovingObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, State)': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Characters/MovingObject.cpp:5: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, State)' 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Characters/MovingObject.cpp:5: undefined reference to `DisplayableObject::~DisplayableObject()' 
CMakeFiles/SuperMarioWorld.dir/System/Characters/MovingObject.cpp.o: In function `MovingObject::MovingObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, State)': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Characters/MovingObject.cpp:10: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, State)' 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Characters/MovingObject.cpp:10: undefined reference to `DisplayableObject::~DisplayableObject()' 
CMakeFiles/SuperMarioWorld.dir/System/Characters/MovingObject.cpp.o: In function `MovingObject::~MovingObject()': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Characters/MovingObject.cpp:25: undefined reference to `DisplayableObject::~DisplayableObject()' 
CMakeFiles/SuperMarioWorld.dir/System/Characters/MovingObject.cpp.o: In function `MovingObject::GetInfoForDisplay()': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Characters/MovingObject.cpp:32: undefined reference to `DisplayableObject::GetInfoForDisplay()' 
CMakeFiles/SuperMarioWorld.dir/System/Characters/MovingObject.cpp.o:(.rodata._ZTI12MovingObject[_ZTI12MovingObject]+0x10): undefined reference to `typeinfo for DisplayableObject' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Box.cpp.o: In function `Box::Box(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, State)': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Box.cpp:3: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, State)' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Box.cpp.o: In function `Box::Box(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, State)': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Box.cpp:8: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, State)' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Box.cpp.o:(.rodata._ZTV3Box[_ZTV3Box]+0x20): undefined reference to `DisplayableObject::GetInfoForDisplay()' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Box.cpp.o: In function `Box::~Box()': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Box.hpp:9: undefined reference to `DisplayableObject::~DisplayableObject()' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Box.cpp.o:(.rodata._ZTI3Box[_ZTI3Box]+0x10): undefined reference to `typeinfo for DisplayableObject' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o: In function `Pipe::Pipe(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, int, PipeType, EventEngine*)': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Pipe.cpp:5: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sf::Vector2<float>, State)' 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Pipe.cpp:5: undefined reference to `DisplayableObject::~DisplayableObject()' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o: In function `Pipe::~Pipe()': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Pipe.cpp:14: undefined reference to `DisplayableObject::~DisplayableObject()' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o: In function `Pipe::SpawnEnemyIfTimeElapsed()': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Pipe.cpp:50: undefined reference to `DisplayableObject::DisplayableObject(EventEngine*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, State)' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o: In function `Pipe::MoveEnemyBeingSpawned(float)': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Pipe.cpp:58: undefined reference to `DisplayableObject::Slide(float, float)' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o: In function `Pipe::IsEnemyReadyToLeavePipe()': 
/home/lex/Documents/cs/games/SuperMarioWorld/System/Items/Pipe.cpp:92: undefined reference to `DisplayableObject::GetCoordinates() const' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o:(.rodata._ZTV4Pipe[_ZTV4Pipe]+0x20): undefined reference to `DisplayableObject::GetInfoForDisplay()' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o:(.rodata._ZTV4Pipe[_ZTV4Pipe]+0x28): undefined reference to `DisplayableObject::UpdateAfterCollision(CollisionDirection, ObjectClass)' 
CMakeFiles/SuperMarioWorld.dir/System/Items/Pipe.cpp.o:(.rodata._ZTI4Pipe[_ZTI4Pipe]+0x10): undefined reference to `typeinfo for DisplayableObject' 
collect2: error: ld returned 1 exit status 
CMakeFiles/SuperMarioWorld.dir/build.make:957: recipe for target 'SuperMarioWorld' failed 
make[2]: *** [SuperMarioWorld] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/SuperMarioWorld.dir/all' failed 
make[1]: *** [CMakeFiles/SuperMarioWorld.dir/all] Error 2 
Makefile:127: recipe for target 'all' failed 
make: *** [all] Error 2 

EDIT2: は今、私は愚かな感じがありました私が含むことを忘れた別のファイルは、System/DisplayableObject.cppでした。

ありがとうございました。

+1

エラー "定義されていない参照"は、関数が*宣言されている(ヘッダファイルの中に)* **定義されていないことを意味します**(コードはありません)。例えば、 'KeyboardEvent :: GetKey()'関数のコードはソースファイル 'EventEngine/KeyboardEvent.cpp'に含まれていますが、コンパイルはしません。 – Tsyvarev

+0

質問テキストの書式設定では、* quotations *のシンボル '>'を使用します。コードの書式設定は、行を4つのスペースで開始するか、または選択したテキストにツール '{}'を使用して行います。エラーログと同じです。 – Tsyvarev

+0

ありがとう!それはその一部の問題でした。今質問を更新しました。また、書式設定のヒントに感謝します。 –

答えて

0

ビルドにすべてのソースファイルを含めていませんでした。

たとえば、エラーメッセージで、リンカーはKeyboardEvent::GetType()関数の定義が不足していると不平を言っています。

KeyboardEventのリポジトリを検索すると、この機能はEventEngine/KeyboardEvent.cppで定義されています。これはCMakeのSOURCE_FILESの一部ではありません。

他のソースファイルも存在しない可能性があります。コンパイルするまで、リンカーエラーを1つずつ修正してみてください。

+0

ありがとう、それは私の問題の大きな部分を解決!それは実際に私が逃した唯一のソースファイルでした。 コンパイルのステータスが100%になりましたが、それ以降もエラーは発生します。 –