glewInit и создание dll

Я занимаюсь разработкой хобби opengl3 engine, и я решил сделать из него новую сборку.dll. Он использует GLEW для получения функций opengl3 из графического процессора. Я успешно построил его около 5 месяцев назад, но сейчас я сильно изменился и не хочу работать.

Таким образом,.dll собирается идеально (windows7, mingw). Я сделал простую программу, и она падает при первом вызове glCreateProgram который запускается кодом из mylib.dll.

в псевдокоде:

#include "mylib.hpp"
int main(){
   std::cout << (void*)glCreateProgram << "\n";  
   // displays 0 as glCreateProgram haven't been loaded yet

   myspace::Window* = new SDL2BasedWindow(...);
   //this constructor is from my .dll and calls glewInit() which returns GLEW_OK
   std::cout << (void*)glCreateProgram << "\n";
   //this displays proper address 
   int testGLEW= glCreateProgram();
   std::cout << "glCreateProgram from main: " << testGLEW<< "\n";
   //this displays 1 which means valid call to glCreateProgram
   window->runApplication(new Application(...));
   //Application is user-defined class, it further creates myspace::ShaderProgram 
   //which is imported from my .dll (part of my engine) which then calls 
   //glCreateProgram in it's initialisation 
   //(it is first call to any function which should be initialized by GLEW if we count only code imported from mylib.dll)


}

    //in ShaderProgram constructor:
    std::cout << "trying to call glCreateProgram, address: ";
    std::cout << (void*)glCreateProgram << "\n";  //this displays 0 (!)
    int id = glCreateProgram();                   //this ends execution with SIGSEGV
    printf("created program: %d\n", id);          //so this one is never called

Поэтому мой вопрос: почему GLEW работает только в коде, который не импортирован из моего.dll, и как я могу это исправить?

Кстати, я проверил nm mylib.dll муравей содержит glCreateProgram и другие функции, зависящие от glew, я также использую #define GLEW_STATIC как в.dll, так и в программе, которая использует этот.dll

Спасибо за вашу помощь!

1 ответ

#define GLEW_STATIC используется для создания статической библиотеки или исполняемого файла.

Чтобы построить .dll использование #define GLEW_BUILD вместо.

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