Почему Visual Studio пытается связать «freeglutd.lib»?

Вопрос:Я пытаюсь скомпилировать OpenGL-программу с помощью Visual Studio 2013, но я получаю следующую ошибку: Ошибка 1 ошибка LNK1104: невозможно открыть файл 'freeglutd.lib'... Для справки, у меня установлен FreeGLUT и настроен VS для поиска правильных каталогов для включенных файлов и файлов библиотек. Действительно, VS распознает, что GLUT включает файлы просто отлично. Я также добавил opengl32.lib и

Вопрос:

Я пытаюсь скомпилировать 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”. Надеюсь, это поможет вам!

Оцените статью
Добавить комментарий