Изучение OpenGL с glew и freeglut; но есть проблема
Я использую Visual Studio 2013 и использовал nuget для установки "glew" и "freeglut". Я следую за курсом и этими инструкциями по установке:
http://in2gpu.com/2014/10/15/setting-up-opengl-with-visual-studio/
По дороге я запутался, но внимательно прочитал инструкцию. В конце сборки моего простого проекта я получил ошибку:
1> LINK: фатальная ошибка LNK1104: не удается открыть файл 'Dependencies\freeglut.obj'
#include <iostream>
#include "Dependencies\glew\glew.h"
#include "Dependencies\freeglut\freeglut.h"
int main(int argc, char **argv)
{
return 0;
}
Я читал другие сайты об установке библиотек, но я просто запутался. Любая помощь и всестороннее обсуждение будут очень полезны. Благодарю.
2 ответа
ССЫЛКА: фатальная ошибка LNK1104: невозможно открыть файл 'Зависимости \ freeglut.
obj
'
Так не должно быть freeglut.obj
, но freeglut.lib
,
Также убедитесь, что вы правильно выполнили все шаги в Now let’s prepare FreeGLUT
раздел руководства: они очень четко объяснили, как добавить каталоги библиотеки поиска и входные данные компоновщика, но в отчетах Visual Studio отсутствуют Dependencies\freeglut.obj
- внимательно проверьте, что у вас есть в свойствах проекта -> Linker
-> Input
-> Additional Dependencies
,
К сожалению, мне придется задать очевидный вопрос: находится ли freeglut.lib там, где он должен быть, и вы указали правильный каталог?
В вашей ошибке написано Dependencies\freeglut.obj, но если вы следовали учебному пособию, freeglut должен быть в Dependencies \ freeglut. Другой распространенной ошибкой в Windows является использование полного пути к файлу с пробелами (C:.... Мои документы...), но не указание полного пути к файлу в кавычках. Линкер может быть сбит с толку этим.
РЕДАКТИРОВАТЬ: я думаю, что я был отклонен, так как я не заметил более очевидную проблему, что ваш компоновщик ищет freeglut.obj, которого у вас нет. Убедитесь, что вы называете это freeglut.lib.
Концептуально, вот что происходит, и это может помочь вам устранить неполадки: когда вы пишете файл cpp и компилируете его, он превращается в файл obj. Компилятору не нужно знать все. Вы можете объявить функцию, которая возвращает int и принимает в качестве аргумента значение bool, и использовать его в своем коде, и компилятор говорит: "Хорошо, если вы так говорите".
Ваша программа, вероятно, будет иметь несколько файлов cpp и, следовательно, несколько файлов obj. После компиляции файлы obj соединяются вместе и образуют ваш исполняемый файл. Если что-то пойдет не так (есть!), Это ошибка компоновщика. Компоновщик говорит: "Хорошо, вы говорите, что используете эту функцию... где она?"
Вы получили файлы lib. В этом случае это статические библиотеки, по сути, контейнер для пакета obj-файлов, не отличающийся от того, что вы написали все функции и классы freeglut самостоятельно и скомпилировали их. Линкер хочет связать их. Для кода, который вы пишете и компилируете, Visual Studio гарантирует, что все окажется в нужной папке и будет выглядеть в нужном месте. Для скомпилированных объектных файлов, поступающих откуда-то еще? У него нет возможности узнать, поэтому вы должны сообщить VS две вещи: в какой папке находятся библиотеки и как называются файлы библиотек. Тогда компоновщик знает, где искать и что он ищет.
Где-то вдоль линии вы помещаете файлы в неправильном месте, или указываете VS неправильное местоположение, или неправильные файлы, или некоторую комбинацию. ИЛИ вы сделали что-то вроде пробелов в пути к файлу без кавычек. Другая распространенная ошибка - смешивание разных платформ. Объектные файлы x86 (т.е. 32-битные) и x64 различны, и если ваш компоновщик ищет один тип, он не поймет другой. Ваша загрузка предоставила библиотеки для разных платформ, а VS позволяет вам выбрать целевую платформу. Убедитесь, что все одинаково.