Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 13
1

Статическая линковка glew

16.11.2018, 12:47. Показов 3328. Ответов 4

Author24 — интернет-сервис помощи студентам
Делаю уроки по opengl.
Как сделать так чтобы библиотека glew, была включена в исполняемый файл.
Чтобы он запускался без необходимости ложить рядом glew32.dll или копировать ее в system32.
Редактор CLion, Windows
Код урока по созданию окна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Include standard headers
#include <stdio.h>
#include <stdlib.h>
 
// Include GLEW
#include <GL/glew.h>
 
// Include GLFW
#include <GLFW/glfw3.h>
GLFWwindow* window;
 
// Include GLM
#include <glm/glm.hpp>
using namespace glm;
 
int main( void )
{
    // Initialise GLFW
    if( !glfwInit() )
    {
        fprintf( stderr, "Failed to initialize GLFW\n" );
        getchar();
        return -1;
    }
 
    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
 
    // Open a window and create its OpenGL context
    window = glfwCreateWindow( 1024, 768, "Tutorial 01", NULL, NULL);
    if( window == NULL ){
        fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" );
        getchar();
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
 
    // Initialize GLEW
    if (glewInit() != GLEW_OK) {
        fprintf(stderr, "Failed to initialize GLEW\n");
        getchar();
        glfwTerminate();
        return -1;
    }
 
    // Ensure we can capture the escape key being pressed below
    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
 
    // Dark blue background
    glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
 
    do{
        // Clear the screen. It's not mentioned before Tutorial 02, but it can cause flickering, so it's there nonetheless.
        glClear( GL_COLOR_BUFFER_BIT );
 
        // Draw nothing, see you in tutorial 2 !
 
        
        // Swap buffers
        glfwSwapBuffers(window);
        glfwPollEvents();
 
    } // Check if the ESC key was pressed or the window was closed
    while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
           glfwWindowShouldClose(window) == 0 );
 
    // Close OpenGL window and terminate GLFW
    glfwTerminate();
 
    return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(untitled2)

set(CMAKE_CXX_STANDARD 14)





include_directories(
d:/extra/glew-2.1.0-mingw-w64/include/
d:/extra/glfw-3.2.1.bin.WIN64/include/
d:/extra/glm-0.9.9.3/)


link_directories(d:/extra/glew-2.1.0-mingw-w64/lib/
d:/extra/glfw-3.2.1.bin.WIN64/lib-mingw-w64/
)

add_executable(untitled2 main.cpp)


set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -static-libstdc++")

target_link_libraries(untitled2 glfw3 opengl32 libglew32.a libglew32.dll.a)




0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2018, 12:47
Ответы с готовыми решениями:

Статическая линковка
Появилась необходимость прилинковать статическую библиотеку (GLFW) к проекту на C++. Я подключил...

Статическая линковка
Всем привет. Я скомпилировал простую программу с помощью mingw64, набрав в консоли: У меня...

Статическая линковка
Добрый вечер. Прочитал что бы екзешка запускалась на любом компьютере нужно сделать статическую...

Статическая линковка MinGW
Как задать статическую линковку для MinGW в среде Qt Creator? Прописал в pro- файле:, но не...

4
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
16.11.2018, 12:57 2
pistonio, по порядку, для начала я бы добавил такое в CMakeLists
Код
find_package(glfw3 REQUIRED)
...
#потом линкуем
target_link_libraries(${PROJECT_NAME} glfw)
#статически добавляем GLEW
add_library(glew STATIC IMPORTED GLOBAL)
...
#и линкуем 
target_link_libraries(${PROJECT_NAME} libglew32.a)
Еще я бы убрал флаги с CMAKE_EXE_LINKER_FLAGS и все добавлял через target_link_libraries. И да следите за порядком, у меня выше порядок хаотичный, Вы же себе упорядочите, должно работать.
0
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,493
16.11.2018, 12:59 3
Код
find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
     link_libraries(${GLEW_LIBRARIES})
endif()
Если не сможет найти библиотеку, значит она располагается по нестандартным путям.
В этом случае нужно подсказать ищейке find_package(GLEW REQUIRED) где ещё её можно найти.

Например так:

Код
set(CMAKE_PREFIX_PATH "d:/libs/glew-1.10.0")
set(CMAKE_LIBRARY_PATH "d:/libs/glew-1.10.0/lib/Release/Win32/")   

find_package(GLEW REQUIRED) 
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS}) 
     link_libraries(${GLEW_LIBRARIES}) 
endif()
1
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
16.11.2018, 13:09 4
поправочка к моему посту
Код
add_library(glew_static STATIC IMPORTED)
set_target_properties(glew_static PROPERTIES IMPORTED_LOCATION сюда_пишем_полный_путь_к libglew32.a)
target_link_libraries(${PROJECT_NAME} glew_static)
1
5278 / 2875 / 484
Регистрация: 05.10.2013
Сообщений: 7,649
Записей в блоге: 155
16.11.2018, 17:30 5
GLEW - эта очень старая библиотека и она включает в себя весь устаревший функционал примерно с 1991 года.

С помощью этого сайта: https://glad.dav1d.de/ можно сгенерировать Core Profile для 3+ куда не будет входить deprecated/legacy функционал. Эта библиотека подключается как папка include + один файл с исходным кодом. Весит 150 КБайт, а не 3.7 МБайт, как GLEW.

glad-ogl-3.1-core.zip
Файл glad.c нужно включить в проект.

Так эта библиотека используется:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
 
#include <glad/glad.h>
#include <GLFW/glfw3.h>
 
void showError(std::string message)
{
    std::cout << message << std::endl;
    std::getchar();
    glfwTerminate();
}
 
int main()
{
    glfwInit();
    GLFWwindow* window = glfwCreateWindow(640, 480, "LearnOpenGL", nullptr, nullptr);
    glfwMakeContextCurrent(window);
 
    if (!gladLoadGL())
    {
        showError("Failed to initialize GLAD");
        return -1;
    }
 
    glClearColor(0.0f, 1.0f, 1.0f, 0.0f);
 
    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
 
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}
1
16.11.2018, 17:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2018, 17:30
Помогаю со студенческими работами здесь

SFML, статическая линковка
Никак не получается соединить всё в один екзешник. -s добавил к библиотекам, SFML_STATIC...

Статическая линковка в CMake и VC++
Что прописать в файле CMakeLists.txt чтобы стандартные библиотеки линковались статически? В VC++ ...

Статическая линковка boost
Hi all! Захотелось побаловаться бустом, и столкнулся с проблемой, что в пакете boost-libs...

Статическая линковка библиотек
Блин, ну почему простенькая программа &quot;hello world&quot; (на русском языке) требует библиотеку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru