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
вместо.