• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

GLFW - Aplikacja nie kompiluje ale nie włącza

0 głosów
258 wizyt
pytanie zadane 21 czerwca 2020 w C i C++ przez NintyS Użytkownik (940 p.)

Dzień dobry, postanowiłem pouczyć się GLFW - robiłem wszystko według kursu i kiedy chciałem skompilować kod, nie działa ( mam tak samo jak On ) - na chińskim blogu znalazłem jak to rozwiązać (#ifndef __APPLE__ i #endif), ale teraz program mi się kompiluje lecz nie działa / odrazu nie kończy. Próbowałem kody przykładowe. Kiedy zmniejszę dyrektywę wtedy mam błąd funkcji w main'ie, a gdy ją powiększę to mam błąd main'a - np. "Undefined symbols for architecture x86_64:   "_glfwCreateWindow", referenced from:       _main in main.o" itd.

#include <GLFW/glfw3.h> //Biblioteka

#include <iostream>

constexpr int WIN_X = 1280, WIN_Y = 720; //Rozmiary

int main(int argc, const char * argv[]) {
    
    #ifndef __APPLE__
    
    glfwInit(); //Inicjowanie biblioteki
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Ustawianie wersji
    
    GLFWwindow* window = glfwCreateWindow(WIN_X, WIN_Y, "OpenGL", nullptr, nullptr); //Preferecje okna - Szerokość, nazwa i coś tam jeszcze
    if(!window) //Jeżeli nie powiodło się stworxzenie okna
        std::cout << "Nie powiodło się";
        return 1;
    
    glfwMakeContextCurrent(window); //przypisujemy kontekst do wątku okna
    
    while (!glfwWindowShouldClose(window)) { //Główna pętla - tu będzie mechanika gry
        
        if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
            glfwSetWindowShouldClose(window, 1);
        }
        
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    
    glfwTerminate(); //"Zabijanie" okna
    
    return 0;
    
    #endif
    
}

 

komentarz 21 czerwca 2020 przez j23 Mędrzec (195,220 p.)

(...) znalazłem jak to rozwiązać (#ifndef __APPLE__ i #endif), ale teraz program mi się kompiluje lecz nie działa / odrazu nie kończy.

Pewnie makro __APPLE__ jest zdefiniowane, a to oznacza, że wnętrze main w trakcie kompilacji jest puste. I dlatego "od razu się kończy". Biblioteka OpenGL jest multiplatformowa i tak długo jak nie będziesz używał funkcji specyficznych dla danego systemu, nie musisz używać kompilacji warunkowej.

Problemem jest - co też dostałeś w odpowiedzi - niezgodność bitowa biblioteki i twojej aplikacji.

 

1 odpowiedź

0 głosów
odpowiedź 21 czerwca 2020 przez Flint Początkujący (280 p.)

Jesteś pewien, że twoja karta wspiera OpenGL w wersii 4.5? W ogóle nie sprawdzasz czy glfw zostało poprawnie zaincjalizowane 

if (!glfwInit())
{
    // Initialization failed
}

Inną sprawą jest czy używasz odpowiednich binarek 32/64 bit w swoim buildzie?

 

Podobne pytania

0 głosów
0 odpowiedzi 218 wizyt
pytanie zadane 11 kwietnia 2021 w C i C++ przez Puxfam Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 210 wizyt
pytanie zadane 5 kwietnia 2021 w C# przez koleś34 Gaduła (3,270 p.)
0 głosów
0 odpowiedzi 359 wizyt
pytanie zadane 17 marca 2021 w C# przez oscarzasty Nowicjusz (220 p.)

93,765 zapytań

142,721 odpowiedzi

323,372 komentarzy

63,359 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...