Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 09.04.2014
Сообщений: 71
1

Не линкуется GLEW в VS2013

07.07.2016, 09:50. Показов 2109. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь собрать проект под vs2013, glfw и devil подключаются нормально, а у glew'a кроме glewInit() ничего не работает. Если я не правильно написал CMakeLists.txt, то как тогда правильно? Буду очень признателен за помощь.

Ошибки линковки:
Warning 1 warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library C:\Users\DevilRigoll\Desktop\GlproGarbage\LINK GLpro
Error 13 error LNK2001: unresolved external symbol ___glewShaderSource C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 12 error LNK2001: unresolved external symbol ___glewLinkProgram C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 11 error LNK2001: unresolved external symbol ___glewGetShaderiv C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 10 error LNK2001: unresolved external symbol ___glewGetShaderInfoLog C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 9 error LNK2001: unresolved external symbol ___glewGetProgramiv C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 8 error LNK2001: unresolved external symbol ___glewGetProgramInfoLog C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 7 error LNK2001: unresolved external symbol ___glewDetachShader C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 6 error LNK2001: unresolved external symbol ___glewDeleteShader C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 5 error LNK2001: unresolved external symbol ___glewCreateShader C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 4 error LNK2001: unresolved external symbol ___glewCreateProgram C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 3 error LNK2001: unresolved external symbol ___glewCompileShader C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 2 error LNK2001: unresolved external symbol ___glewAttachShader C:\Users\DevilRigoll\Desktop\GlproGarbage\shader.obj GLpro
Error 14 error LNK1120: 12 unresolved externals C:\Users\DevilRigoll\Desktop\GlproGarbage\Debug\GLpro.exe GLpro

shader.cpp
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
#include <stdio.h>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
 
#include <stdlib.h>
#include <string.h>
 
#include <GL/glew.h>
 
#include "shader.hpp"
 
GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path){
 
    // Create the shaders
    GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
    GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
 
    // Read the Vertex Shader code from the file
    std::string VertexShaderCode;
    std::ifstream VertexShaderStream(vertex_file_path, std::ios::in);
    if(VertexShaderStream.is_open()){
        std::string Line = "";
        while(getline(VertexShaderStream, Line))
            VertexShaderCode += "\n" + Line;
        VertexShaderStream.close();
    }else{
        printf("Impossible to open %s. Are you in the right directory ? Don't forget to read the FAQ !\n", vertex_file_path);
        getchar();
        return 0;
    }
 
    // Read the Fragment Shader code from the file
    std::string FragmentShaderCode;
    std::ifstream FragmentShaderStream(fragment_file_path, std::ios::in);
    if(FragmentShaderStream.is_open()){
        std::string Line = "";
        while(getline(FragmentShaderStream, Line))
            FragmentShaderCode += "\n" + Line;
        FragmentShaderStream.close();
    }
 
    GLint Result = GL_FALSE;
    int InfoLogLength;
 
 
    // Compile Vertex Shader
    printf("Compiling shader : %s\n", vertex_file_path);
    char const * VertexSourcePointer = VertexShaderCode.c_str();
    glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
    glCompileShader(VertexShaderID);
 
    // Check Vertex Shader
    glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
    glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    if ( InfoLogLength > 0 ){
        std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
        glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
        printf("%s\n", &VertexShaderErrorMessage[0]);
    }
 
 
 
    // Compile Fragment Shader
    printf("Compiling shader : %s\n", fragment_file_path);
    char const * FragmentSourcePointer = FragmentShaderCode.c_str();
    glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL);
    glCompileShader(FragmentShaderID);
 
    // Check Fragment Shader
    glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
    glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    if ( InfoLogLength > 0 ){
        std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
        glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
        printf("%s\n", &FragmentShaderErrorMessage[0]);
    }
 
 
 
    // Link the program
    printf("Linking program\n");
    GLuint ProgramID = glCreateProgram();
    glAttachShader(ProgramID, VertexShaderID);
    glAttachShader(ProgramID, FragmentShaderID);
    glLinkProgram(ProgramID);
 
    // Check the program
    glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
    glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    if ( InfoLogLength > 0 ){
        std::vector<char> ProgramErrorMessage(InfoLogLength+1);
        glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
        printf("%s\n", &ProgramErrorMessage[0]);
    }
 
    
    glDetachShader(ProgramID, VertexShaderID);
    glDetachShader(ProgramID, FragmentShaderID);
    
    glDeleteShader(VertexShaderID);
    glDeleteShader(FragmentShaderID);
 
    return ProgramID;
}
main.cpp
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
#include <stdio.h>
#include <stdlib.h>
 
 
#include <GL/glew.h>
 
// #define GLFW_DLL // Depending on how you built/installed GLFW, you may want to change this
#include <GLFW/glfw3.h>
 
#include <glm/glm.hpp>
using namespace glm;
 
GLFWwindow* window;
 
#include "common/shader.hpp"
 
int main(void)
{
    // Initialise GLFW
    if( !glfwInit() )
    {
        fprintf(stderr, "Failed to initialize GLFW\n");
        getchar();
        return -1;
    }
 
    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    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, "Playground", 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{
        // 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
cmake_minimum_required (VERSION 2.6)
project (GLpro)

if(MSVC AND NOT "${MSVC_VERSION}" LESS 1400)

add_definitions( "/MP" )

endif()



find_package(OpenGL REQUIRED)

add_definitions(
-DTW_STATIC
-DTW_NO_LIB_PRAGMA
-DTW_NO_DIRECT3D
-DGLEW_STATIC
-D_CRT_SECURE_NO_WARNINGS
)


set(GLFW_INCLUDE_PATH "C:/Library_for_project/glfw-3.1.2.bin.WIN32/include")
set(GLFW_LIBRARY "C:/Library_for_project/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.lib" )


set(GLEW_INCLUDE_PATH "C:/Library_for_project/glew-1.13.0/include" )
set(GLEW_LIBRARY "C:/Library_for_project/glew-1.13.0/lib/Release/Win32/glew32.lib")


set(GLM_INCLUDE_PATH "C:/Library_for_project/glm1" )



set(DEVIL_LIBRARY "C:/Library_for_project/DevIL-SDK/lib/DevIL.lib"
"C:/Library_for_project/DevIL-SDK/lib/ILU.lib"
"C:/Library_for_project/DevIL-SDK/lib/ILUT.lib")
set(DEVIL_HEADER "C:/Library_for_project/DevIL-SDK/include" )


set(MY_HEADER_FILES
# put all your .h here. Right now we have none.
# projectFile
workGL.h
# common
common/shader.hpp
#common/controls.hpp
#common/texture.hpp
#common/objloader.hpp
#common/vboindexer.hpp
#common/text2D.hpp
#common/tangentspace.hpp
#common/quaternion_utils.hpp
)

set(MY_SOURCE_FILES
# projectFile................
main.cpp
# shaders....................
shaders/SimpleFragmentShader.fragmentshader
shaders/SimpleTransform.vertexshader
shaders/SingleColor.fragmentshader
shaders/SimpleVertexShader.vertexshader
# common.....................
common/shader.cpp
#common/controls.cpp
#common/texture.cpp
#common/objloader.cpp
#common/vboindexer.cpp
#common/text2D.cpp
#common/tangentspace.cpp
#common/quaternion_utils.cpp
)



include_directories(
${GLFW_INCLUDE_PATH}
${GLEW_INCLUDE_PATH}
${GLM_INCLUDE_PATH}
${DEVIL_HEADER}
)


add_executable(GLpro
${MY_HEADER_FILES}
${MY_SOURCE_FILES}
)
target_link_libraries(GLpro
${OPENGL_LIBRARY} # filled by "find_package(OpenGL REQUIRED)"
${GLFW_LIBRARY}
${GLEW_LIBRARY}
${DEVIL_LIBRARY}
)

#set_target_properties(GLpro PROPERTIES XCODE_ATTRIBUTE_CONFIGURATION_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/GLpro/")
#create_target_launcher(GLpro WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/GLpro/")


# HOW-TO. You can safely remove anything below.

# test if linux, mac or windows :

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
message("You're on Mac OS !")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
message("You're on Linux !")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
message("You're on Windows !")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # Yes this is weird but you have to repeat the "if" here.


# Add a checkbox in CMakeGUI :

set(SOME_STUFF OFF CACHE BOOL "Check this to print an extra message at the beginning of main()")

# Add a preprocessor define :

if(SOME_STUFF)
add_definitions(
-DCOMPILE_WITH_SOME_PREPROCESSOR_DIRECTIVE
)
endif(SOME_STUFF)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2016, 09:50
Ответы с готовыми решениями:

Не линкуется файл
Совсем-совсем новичек и только начал разбираться с masm32. Общем, такие дела - в obj-файл спокойно...

Не линкуется obj file
Программа тасмом компилируется, но не линкуется. Мне нужно ввести данные и вывести. Вроде бы все...

dynamic RTL не линкуется
Пытаюсь отправить письмо. Письмо нормально отправляется. Но как только снимаю галку в опциях Build...

Не линкуется простенькая программа
Программа создает 4 окна и разбивает главное окно на 4 части, также создается 4 потока и они рисуют...

5
Модератор
3387 / 2159 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
07.07.2016, 10:30 2
DevilRigoll, а это make list руками написанный или сформированный студией? Файлы указанные в нем там и лежат?
0
1 / 1 / 1
Регистрация: 09.04.2014
Сообщений: 71
07.07.2016, 11:41  [ТС] 3
vgx,
Руками написанный, файлы лежат там, копировал путь из проводника.
0
Модератор
3387 / 2159 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
07.07.2016, 11:45 4
DevilRigoll, мой опыт работы с VS не велик, поэтому могу быть не прав, но зачем писать его руками? студия позволяет подключать библиотеки через свойства проекта
0
1 / 1 / 1
Регистрация: 09.04.2014
Сообщений: 71
07.07.2016, 11:46  [ТС] 5
vgx, просто хочу разобраться с cmake'ом
0
Модератор
3387 / 2159 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
07.07.2016, 11:56 6
Лучший ответ Сообщение было отмечено DevilRigoll как решение

Решение

DevilRigoll, может поможет
Save yourself a lot of trouble and just add glew.c to your project. Make sure you #define GLEW_STATIC, and everything will be fine.
1
07.07.2016, 11:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2016, 11:56
Помогаю со студенческими работами здесь

Не линкуется программа с Гитхаба
Дано: Microsoft Visual C++ 2008, экспресс-выпуск (SP1) - RUS. Пытаюсь скомпилировать вот эту...

Не линкуется проект с boost::thread
Здравствуйте! Пытаюсь собрать проект в Code::Blocks на Ubuntu. В проекте используется библиотека...

Не линкуется FreeGLUT в CMake (CLion)
Доброго времени суток. Никак не могу прилинковать FreeGLUT в CMake (который в CLion). FreeGLUT...

не линкуется класс с static членами
не линкуется класс с static членами class A { public: static int get(){return aaa;} A(){};...


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

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