Почему glewInit() выдает segfault?

Я работаю над проектом с opengl, используя glew и glfw

Проект больше, но только код инициализации работает неправильно. Я использую glew 2.2.0_1 и glfw 3.3.8. (кстати, я запустил это в отладчике, поэтому я на 100% уверен, что glewInit() вызывает segfault. И если я помещу это в файл без остального кода, это также вызовет segfault)

Код:

#include <GL/glew.h>
#include <GLFW/glfw3.h>

const int WIDTH = 640;
const int HEIGHT = 480;
int main(int argc, char **argv) {
    // Set up GLFW and create window
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Spinning Cube", nullptr, nullptr);
    glfwMakeContextCurrent(window);
    if (!window) {
        return 1;
    }
    // Set up GLEW
    glewInit();
    // ...
}

Это ошибка библиотеки или я что-то не так делаю? (Для всех, кто спрашивает, этот код компилируется без каких-либо предупреждений или ошибок)

Какая у тебя ОС? Мак? Если да, добавьте glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);

Rabbid76 08.01.2023 22:29

Какую версию GLEW вы используете? Видимо была ошибка в более ранних версиях с профилем ядра и окнами.

AspectOfTheNoob 08.01.2023 22:29

Это точно твой код? Каждый раз, когда создание окна завершается успешно (и, таким образом, возвращается допустимый указатель окна), выполняется оператор return. Итак, если вы дойдете до glewInit, то создание окна уже не удалось.

BDL 08.01.2023 22:42

@AspectOfTheNoob я использую версию 2.2.0_1 Я читал, что ошибка была исправлена ​​в версии 2.0, но другой пользователь помог мне с этим, и теперь это работает, спасибо

SparkDev 09.01.2023 15:18

@Rabbid76 Спасибо, я на самом деле на macos, так что все отлично работает, спасибо

SparkDev 09.01.2023 15:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В macOS необходимо создать контекст основного профиля OpenGL с установленным флагом прямой совместимости:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);

Другие вопросы по теме