Не может скомпилировать образцы OpenGL Superbible 7th (неразрешенный внешний символ)

Я следую за шагами в HOWTOBUILD.txt, У меня уже есть необходимые файлы для сборки glfw. Впервые компоновщик жалуется на glfw. После поиска, кажется, мне нужно связать с gl3w смотрите эту ссылку. Я создал статические библиотеки для gl3w, Теперь я открыл новый проект и включил путь к includeсм. изображение ниже.

введите описание изображения здесь

Для компоновщика я связался с glfw3dll.lib gl3w.lib opengl32.lib и включил их путь. Если я запускаю образец из первой главы,

main.cpp

#include "sb7.h"


class my_application : public sb7::application
{
    void render(double currentTime)
    {
        static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
        glClearBufferfv(GL_COLOR, 0, red);
    }
};


DECLARE_MAIN(my_application);

Я получаю ошибки компоновщика.

1>main.obj : error LNK2019: unresolved external symbol "int __cdecl sb6IsExtensionSupported(char const *)" (?sb6IsExtensionSupported@@YAHPBD@Z) referenced in function "public: virtual void __thiscall sb7::application::run(class sb7::application *)" (?run@application@sb7@@UAEXPAV12@@Z)
1>main.obj : error LNK2019: unresolved external symbol "private: static void __stdcall sb7::application::debug_callback(unsigned int,unsigned int,unsigned int,unsigned int,int,char const *,void *)" (?debug_callback@application@sb7@@CGXIIIIHPBDPAX@Z) referenced in function "public: virtual void __thiscall sb7::application::run(class sb7::application *)" (?run@application@sb7@@UAEXPAV12@@Z)
1>main.obj : error LNK2001: unresolved external symbol "protected: static class sb7::application * sb7::application::app" (?app@application@sb7@@1PAV12@A)
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

Я использую Visual Studio 2013. Я проследил одну из этих функций, на которые жалуется компоновщик (т.е. sb6IsExtensionSupported()), на рисунке ниже показано, как вызывается эта функция в sb7.h в то время как его тело на самом деле реализовано в sb7.cpp,

введите описание изображения здесь

Это действительно правильно?

1 ответ

Решение

Я решил проблему. Кажется, есть статическая библиотека, с которой я должен связать и обновить драйвер моей видеокарты. По сути, это я и сделал.

Шаг первый: (Создание GLFW)

Если у вас уже есть библиотека, то вам не нужно этого делать, но проблема при создании примеров, вам нужно правильно указать путь к GLFW. Чтобы сэкономить ваше время, постройте также GLFW. Для этого

1- install cmake.
2- Open the command prompt and navigate to extern/glfw-3.0.4 (using cd command)
3- Type in command prompt: cmake -G "Visual Studio 12" 
4- Open GLFW.sln and build all ( do it for Debug and Release modes)
5- Copy `glfw-3.0.4/src/Debug/glfw3.lib` into the `lib` directory and rename it to glfw3_d.lib.
6- Copy `glf3-3.0.4/src/Release/glfw3.lib` into the `lib` directory but don't rename it.

Шаг второй: (Создание образцов)

1- Open the command prompt and navigate to "build" folder
2- Type in command prompt: cmake -G "Visual Studio 12" ..
3- Open superbible7.sln in build folder and build all. (do it for Debug and Release modes). 

Запуск примеров

Теперь в папке lib есть sb7.lib а также sb7_d.lib, _d означает режим отладки. В моем случае это было причиной проблемы, поэтому вам нужно ссылаться на нее. Откройте новый проект, добавьте путь к sb7 include а также glfw

C++->General-> Additional Include Directories

D:\CPP_Projects\VisualStudio\Modern OpenGL\sb7code-master\sb7code-master\include
D:\CPP_Libraries\glfw-3.1.1\glfw-3.1.1\include

Для компоновщика

Linker->General->Additional Libraries Directories

D:\CPP_Libraries\glfw-3.1.1\glfw-3.1.1\install\src\Debug
D:\CPP_Projects\VisualStudio\Modern OpenGL\GLFW\OpenGLSuperBible_7th\OpenGLSuperBible\ChapterOne\Debug

Linker->Input->Additional Dependencies

sb7_d.lib
glfw3dll.lib
opengl32.lib
glu32.lib

Результат

введите описание изображения здесь

ОЧЕНЬ ВАЖНОЕ СООБЩЕНИЕ:

В моем случае видеокарта поддерживает OpenGL 4.1. По словам readme.txt,

Пожалуйста, обратите внимание: ДАЖЕ, ЕСЛИ ВЫ МОЖЕТЕ СОЗДАТЬ ИСТОЧНИКИ ДЛЯ ЛЮБОГО ИЗБРАННОГО ПЛАТФОРМЫ ВЫБОРА, ВАМ НУЖЕН ПОСЛЕДНИЙ ДРАЙВЕР OpenGL 4.x, ЧТОБЫ ИСПОЛЬЗОВАТЬ ИХ. ПОЖАЛУЙСТА, НЕ ПАНКАЙТЕ КНИГУ, ПОТОМУ ЧТО ВАШ КОМПЬЮТЕР НЕ ПОДДЕРЖИВАЕТ OpenGL 4.x. СПАСИБО

В моем случае возникла проблема с GLFW_OPENGL_CORE_PROFILEПоэтому мне нужно было обновить драйвер видеокарты. Я скачал эту программу просмотра расширений OpenGL, и она показывает мне поддерживаемую версию OpenGL. Мой адаптивный дисплей - AMD Mobility Radeon HD 5000. Я посетил их сайт и загрузил последнюю версию драйвера для моего дисплея. Действительно, моя видеокарта теперь поддерживает OpenGL 4.4, и это снимок

введите описание изображения здесь

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

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