Вопрос:
Я пытаюсь скомпилировать OpenGL-программу с помощью Visual Studio 2013, но я получаю следующую ошибку:
Ошибка 1 ошибка LNK1104: невозможно открыть файл ‘freeglutd.lib’…
Для справки, у меня установлен FreeGLUT и настроен VS для поиска правильных каталогов для включенных файлов и файлов библиотек. Действительно, VS распознает, что GLUT включает файлы просто отлично. Я также добавил opengl32.lib и freeglut.lib в дополнительные зависимости.
Почему VS ищет “freeglutd.lib”? Он определенно не указан в дополнительных зависимостях. Я могу решить ошибку компиляции, переименовав “libglut.lib” в “libglutd.lib” и удалив первый из зависимостей, но мне просто любопытно, почему он ведет себя таким образом.
Говоря о дополнительных зависимостях, действительно ли нужно добавить opengl32.lib? Я могу скомпилировать мою (очень базовую) программу без нее, но более одного человека заявили, что это необходимо, возможно, для более старых версий Visual Studio?
Лучший ответ:
Возможно, уже ответил: ошибка freeglut LNK1104
Также нужно проверить две вещи:
- Вы работаете в режиме отладки или выпуска? d в конце freeglutd.lib предполагает, что это библиотека, предназначенная для отладочных построек
- Попробуйте создать новый проект с нуля, добавьте в него некоторый базовый исполняемый код, который использует freeGLUT и посмотрит, правильно ли связывается VS. Это также проверит, по какой-либо причине файл проекта предыдущего проекта был поврежден (как предложил @RobertHarvey) или проблема находится где-то еще.
Ответ №1
если вы проверили freeglut_std.h(freeglut V3.0):
/* Link with Win32 shared freeglut lib */ # if FREEGLUT_LIB_PRAGMAS # ifdef NDEBUG # pragma comment (lib, «freeglut.lib») # else # pragma comment (lib, «freeglutd.lib») # endif # endif
поэтому, если вы не определяете NDEBUG, компоновщик будет ссылаться на “freeglutd.lib”,
вы можете решить это, указав NDEBUG в “PreprocessorDefinitions”.
Удачи!
Ответ №2
Я решил эту проблему, компилируя freeglut и freeglut_static из сгенерированного CMake soluton в режиме Debug – freeglutd был создан в каталоге lib/Debug. Вы можете поместить этот каталог в путь lib, и он будет работать!
Ответ №3
Эй, я не знаю, есть ли у вас эта ошибка, но вот решение. В значительной степени “freeglutd.lib” имеет отношение к отладке, следовательно, “d” на конце, поэтому я сделал это:
Свойствa > C/С++ > Препроцессоp > Определения препроцессора и введите NDEBUG. Затем ОК и Применить.
Что это делает в “freeglut_std.h”, есть ifdef для NDEBUG, если он определен, то используйте “freeglut.lib”, иначе он будет использовать “freeglutd.lib”. Поэтому, определив его в определениях препроцессора, вы теперь используете “freeglut.lib”. Надеюсь, это поможет вам!