2014-10-28 6 views
5

मैं सेल्सियस तक ++ नया हूँ और खेल प्रोग्रामिंग जानने की कोशिश, मैं SFML चुनें और Jetbrain द्वारा Clion और Ubuntu मशीन के प्रयोग पर चलाते हैं।कैसे Clion में SFML को चलाने के लिए, करने के लिए त्रुटि अपरिभाषित संदर्भ?

#include <SFML/Graphics.hpp> 

using namespace sf; 

int main() { 

RenderWindow window(sf::VideoMode(200, 200), "SFML Work!"); 
CircleShape shape(100.f); 
shape.setFillColor(Color::Green); 

while (window.isOpen()) { 
    Event event; 
    while (window.pollEvent(event)) { 
     if (event.type == Event::Closed) { 
      window.close(); 
     } 
    } 

    window.clear(); 
    window.draw(shape); 
    window.display(); 
} 

return 0; 
} 

यह त्रुटि जब मैं Clion पर चलने

CMakeFiles/SFMLBasic.dir/main.cpp.o: In function `main': 
undefined reference to `sf::String::String(char const*, std::locale const&)' 
undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)' 
undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)' 
... 
undefined reference to `sf::Shape::~Shape()' 

मैं कैसे विन्यास या सेटअप Clion में SFML को चलाने के लिए, मैं CMake ऐसा कर सकते हैं पता नहीं है: मैं इस ट्यूटोरियल SFML and Linux यहाँ मेरी कोड निम्नलिखित ? मैं केवल टर्मिनल से चलाने के लिए, यह काम करता है, तो मैं इस आदेश को चलाते हैं।

g++ -c main.cpp 
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system 
./sfml-app 

सभी संदर्भ चर का उपयोग करने के बिना टर्मिनल में हर बार मैनुअल करना कैसे विन्यास के लिए? धन्यवाद।

उत्तर

2

आप अपने CMakeLists.txt में SFML पुस्तकालय लिंक करना होगा।

CMake target_link_libraries पर एक नज़र डालें।

और this link आपके लिए सीएमएमएल लाइब्रेरी पथ को सीएमके में कैसे ढूंढना है, यह जानने में मददगार हो सकता है। https://github.com/LaurentGomila/SFML/blob/master/cmake/Modules/FindSFML.cmake

+0

धन्यवाद, मैं इसे बाहर की जांच करेंगे। – Phonbopit

+0

मैं देखता हूं कि मैं गलती से दूसरे खाते में लॉग इन करने के लिए देखता हूं। यह प्रश्न मेरे द्वारा बनाया गया था, आपके सुझाव को पढ़ने के बाद मैं तय करने की कोशिश करता हूं और यह सही काम करता है, धन्यवाद। – Phonbopit

6

पढ़ @Stackia सुझाव के बाद:

यहाँ एक FindSFML.cmake मॉड्यूल है। यह मेरा समाधान इस ट्यूटोरियल Tutorial: Build your SFML project with CMake

  1. का उल्लेख किया गया है एक cmake_modules फ़ोल्डर बनाएँ और इस फाइल को FindSFML.cmake डाउनलोड करने और उस में कॉपी।

  2. संपादित करें CMakeLists.txt इसे अंतिम फ़ाइल में जोड़ें, परिवर्तनों को फिर से लोड करें पर क्लिक करें।


# Define sources and executable set(EXECUTABLE_NAME "MySFML") add_executable(${EXECUTABLE_NAME} main.cpp)

# Detect and add SFML 
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH}) 
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() 

  1. अब आप निष्पादन योग्य नाम MySFML का चयन करें और रन (Shift + F10) क्लिक कर सकते हैं। यह चलेगा! enter image description here
+0

मैं '$ {SFML_DEPENDENCIES} भी जोड़ूंगा। साझा किए जाने पर यह कुछ भी (बुरा) नहीं करेगा और स्थैतिक लिंकिंग पर स्विच करते समय स्वचालित रूप से सभी एसएफएमएल की निर्भरताओं को जोड़ देगा। – Lukas

2

मैं निम्न चरणों के साथ यह ठीक करने के बाद:

  1. डाउनलोड http://www.sfml-dev.org/download/sfml/2.3.2/64-Linux

    और मेरी परियोजना के साथ फ़ोल्डर में निकालें:

    /home/user/ClionProjects/CPP_first/ 
    
  2. नाम परियोजना " सीपीपी_फर्स्ट "

  3. main.cpp निम्नलिखित

    #include <SFML/Graphics.hpp> 
    
    int main() 
    { 
        sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); 
        sf::CircleShape shape(100.f); 
        shape.setFillColor(sf::Color::Green); 
    
        while (window.isOpen()) 
        { 
         sf::Event event; 
         while (window.pollEvent(event)) 
         { 
          if (event.type == sf::Event::Closed) 
           window.close(); 
         } 
    
         window.clear(); 
         window.draw(shape); 
         window.display(); 
        } 
    
        return 0; 
    } 
    
  4. CMakeLists.txt शामिल निम्नलिखित होते हैं:

    set(EXECUTABLE_NAME "CPP_first") 
    add_executable(${EXECUTABLE_NAME} main.cpp) 
    
    
    # Detect and add SFML 
    set(SFML_DIR "/home/user/ClionProjects/CPP_first/SFML-2.3.2/share/SFML/cmake/Modules") 
    set(CMAKE_MODULE_PATH "/home/user/ClionProjects/CPP_first/SFML-2.3.2/share/SFML/cmake/Modules" ${CMAKE_MODULE_PATH}) 
    find_package(SFML REQUIRED system window graphics network audio) 
    if(SFML_FOUND) 
        include_directories(${SFML_INCLUDE_DIR}) 
        target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES}) 
    endif() 
    
  5. पथ अपने प्रोजेक्ट के लिए /home/user/ClionProjects/CPP_first/

पुनश्च: मैं SFML ढूंढने का तरीका नहीं था जब यह द्वारा स्थापित किया जाता है:

sudo apt-get install libsfml-dev 

मुझे आशा है कि यह मदद मिलेगी किसी

संबंधित मुद्दे