2014-11-05 5 views
1

요세미티에서 QTCreator 및 SFML을 구성하려고합니다. OS X 10.6으로 설정된 최소 버전에서 다소 불쾌한 문제가 발생했습니다 (이제는 OS X 10.9로 설정 됨).QTCreator + SFML on Yosemite 아키텍처에 대한 정의되지 않은 기호 x86_64

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -std=c++11 -Wno-ignored-qualifiers -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -mmacosx-version-min=10.9 -Wall -W -fPIE -I/Applications/QT/5.3/clang_64/mkspecs/macx-clang -I../qtcreator -I../../include -I../../include/tinyxml -I../../include/tmxloader -I/usr/local/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -o PlayState.o ../../source/PlayState.cpp 

모든 팁 :

Undefined symbols for architecture x86_64: 
    "PlayMapAI::m_PlayMapAI", referenced from: 
     PlayMapAI::instance() in MenuState.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [framework] Error 1 
23:23:14: The process "/usr/bin/make" exited with code 2. 
Error while building/deploying project framework (kit: Desktop Qt 5.3 clang 64bit) 
When executing step "Make" 

여기가 함께 실행 된 옵션입니다) 지금은 QTCreator에서 응용 프로그램의 출력은 여기, '건축 x86_64에 대한 정의되지 않음 상징'에 문제가있어 데?

#ifndef PLAY_MAPAI_H_ 
#define PLAY_MAPAI_H_ 

#include <list> 
#include <string> 
#include "GameState.h" 
#include "Sprite.h" 
#include "InputManager.h" 
#include <MapLoader.h> 

struct Kinematic 
{ 
    cgf::Sprite* sprite; 
    sf::Vector3f pos; 
    sf::Vector3f vel; 
    sf::Vector3f heading; 
    float maxForce; 
    float maxSpeed; 
    float maxTurnRate; 
}; 

class PlayMapAI : public cgf::GameState 
{ 
public: 

    void init(); 
    void cleanup(); 

    void pause(); 
    void resume(); 

    void handleEvents(cgf::Game* game); 
    void update(cgf::Game* game); 
    void draw(cgf::Game* game); 

    // Implement Singleton Pattern 
    static PlayMapAI* instance() 
    { 
     return &m_PlayMapAI; 
    } 

protected: 

    PlayMapAI() {} 

private: 

    static PlayMapAI m_PlayMapAI; 

    int x, y; 
    float speed; // player speed 
    float zvel; 
    cgf::Sprite player; 
    cgf::Sprite ghost; 

    sf::RenderWindow* screen; 

    std::list<sf::Vector3f> trail; 
    bool showTrails; 

    Kinematic playerK, enemyK; 
    cgf::InputManager* im; 
    sf::Font font; 
    sf::Text text; 
    tmx::MapLoader* map; 
    bool firstTime; 

    bool checkCollision(uint8_t layer, cgf::Game* game, Kinematic& obj); 
    void centerMapOnPlayer(); 
    sf::Uint16 getCellFromMap(uint8_t layernum, float x, float y); 

    enum { 
     CHASE_BEHAVIOR=0, ARRIVE_BEHAVIOR, PURSUIT_BEHAVIOR, FLEE_BEHAVIOR, EVADE_BEHAVIOR 
    }; 

    const static std::string modes[]; 

    int steerMode; 
    sf::Vector3f chase(Kinematic& vehicle, sf::Vector3f& target); // ir diretamente ao jogador 
    sf::Vector3f arrive(Kinematic& vehicle, sf::Vector3f& target, float decel=0.2); // ir diretamente ao jogador 
    sf::Vector3f pursuit(Kinematic& vehicle, Kinematic& target); // perseguir o jogador, prevendo a posição futura 
    sf::Vector3f flee(Kinematic& vehicle, sf::Vector3f& target, float panicDistance=100); // fugir do jogador 
    sf::Vector3f evade(Kinematic& vehicle, Kinematic& target); 
}; 

#endif 
+0

[vector :: push \ _back odr - 값을 사용하여 정적 클래스 멤버에 대한 정의되지 않은 참조를 일으킬 수있는 복제본] (http://stackoverflow.com/questions/272900/vectorpush-back-odr-uses-the- 값 - 원인 - 정의되지 않은 참조 정적 - clas) – Hiura

+0

죄송합니다 위의 질문의 요점을 얻지 못했습니다 정적 선언과 관련이 있지 않니? –

답변

0

내가 PlayMapAI::m_PlayMapAI 정적 필드 것으로 의심 -

업데이트

여기에 PlayMapAI.h 파일 (모든 .cpp 파일이없는)입니다. 이것은 다음과 같은 번역 단위 (통화 당), 아마 PlayMapAI.cpp 그것을 정의 할 필요가 의미

Type PlayMapAI::m_PlayMapAI; 
+0

PlayMapAI 코드로 업데이트하는 데 오랜 시간이 걸려 죄송합니다. 분명히 인스턴스가 아닙니다. 인스턴스() 메소드를 호출하면 충돌이 발생합니다. –

+0

예, 그렇습니다. 그렇지 않으면 여전히 동일한 컴파일 오류가 발생합니다. 이제 다른 도전에 직면 해 있습니다. 디버거를 사용하고 필요한 경우 새로운 질문을 엽니 다. – Hiura

+0

사실 나는 아직도 같은 컴파일 에러를 가지고 있습니다. private 인 것이고 instance()를 통해 액세스되고 있기 때문에 다른 장소 인'PlayMapAI :: m_PlayMapAI; '에서 선언 할 수 없습니다. 이걸로 귀찮게해서 미안해. 다른 조언을 해줄 수있어? –

0

당신이 어떤 C++ 11 개 기능을 사용하는 경우, 당신은 당신의 .PRO 파일에 CONFIG += c++11이 있어야합니다. 또한 컴파일러에 올바른 SFML 버전이 있는지 확인하십시오. 또한 QT가 최신 버전인지 확인하십시오.

관련 문제