Программа GLFW зависает под Cygwin?

#c #opengl #cygwin #glfw

#c #opengl #cygwin #glfw

Вопрос:

Я пытаюсь создать некоторый переносимый код C opengl, используя glad, glfw. В программе используются сокеты, а msys2 не совместим с posix. Итак, я пытаюсь использовать cygwin, который у нас никогда не работал.

Для cygwin нет двоичного файла glfw, но инструкции требуют сборки glfw из исходного кода для Linux, и утверждается, что он должен работать.

Я создал MWE:

 #include <glad/glad.h>
//#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#include <iostream>
#include <cstdlib>
using namespace std;

static void key_callback(GLFWwindow* win,
                         int key, int scancode,
                         int action, int mods) {
    if (key == GLFW_KEY_ESCAPE amp;amp; action == GLFW_PRESS)
        glfwSetWindowShouldClose(win, GL_TRUE);
}

constexpr int w = 1024, h = 768;
int main() { 
    //  glfwSetErrorCallback(error_callback);
    if (!glfwInit())
        exit(EXIT_FAILURE);
 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

    GLFWwindow* win = glfwCreateWindow(w, h, "Simple example", NULL, NULL);
    if (win == nullptr) {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }
    glfwSetKeyCallback(win, key_callback);
    
    glfwMakeContextCurrent(win);
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
        cerr << "Failed to initialize GLADn";
        exit(EXIT_FAILURE);
    }

    while (!glfwWindowShouldClose(win)) { 
        glViewport(0, 0, w, h);
        glClear(GL_COLOR_BUFFER_BIT);
  
        glfwSwapBuffers(win);
        glfwPollEvents();
    }
 
    glfwDestroyWindow(win);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}
 

Файл glad работает с msys2. Приведенный выше код работает в Linux (Ubuntu 20).

После сборки glfw3 из исходного кода я компилирую его под cygwin с

 g   -g glfwtest.cc glad.c -o glfwtest -L/usr/local/lib -lglfw3 -lX11
 

Программа зависает при запуске. Окно не открывается.
Я попытался запустить gdb в cygwin, и это тоже зависает.

Это домашняя система Windows 10, работает нормально. Cygwin был только вчера установлен с gcc 10.xx и gdb.

Комментарии:

1. Какой X-сервер вы используете?

2. Я не был, теперь я установил xinit и использовал startxwin. Это все еще не работает, появляется окно x, но когда я запускаю программу, я не знаю, куда идет окно x? Мне приходит в голову, что мне нужен posix, а не X. Есть ли какой-нибудь способ перенести библиотеки сокетов и файлов posix в msys2 и сохранить Windows родной?