Visual Studio 2012 — ошибка LNK1104: не удается открыть файл «glew32.lib»

У меня проблемы с компиляцией базовой программы openGL на VS 2012. При компиляции я получаю сообщение об ошибке сборки:

1>LINK : fatal error LNK1104: cannot open file 'glew32.lib'

Я следовал инструкциям, данным мне документацией для GLEW.

В вашем проекте OpenGL откройте «Проект» -> «Свойства» -> «Свойства конфигурации» -> «Компоновщик» -> «Ввод» -> «Дополнительные зависимости» -> добавьте glew32.lib.

Также вы должны включить #include в свои исходники; Для этого добавьте путь к вашей папке glew: Проект -> Свойства -> Свойства конфигурации -> Общие -> Каталоги VC++ -> Включить каталоги и каталоги библиотек;

Вкладка C/C++ -> Общие -> Дополнительные каталоги включения - добавьте туда папку lib

Я также добавил glew32.dll в папку Debug в папке проекта вместе с исполняемым файлом. До сих пор я продолжаю получать эту ошибку.

Если вам нужны дополнительные разъяснения о моих действиях, не стесняйтесь спрашивать


person Jebathon    schedule 01.01.2014    source источник
comment
Я не знаю, как оформить цитату - если модератор может исправить это для меня   -  person Jebathon    schedule 02.01.2014
comment
Что произойдет, если вы временно скопируете файл .lib в какой-нибудь существующий допустимый каталог, например $(WindowsSdkDir)\lib?   -  person Dialecticus    schedule 02.01.2014
comment
У вас есть glew32.lib?   -  person drescherjm    schedule 02.01.2014
comment
Я удивлен, что заставило первоначального автора заявить, что обязательный шаг является НЕОБЯЗАТЕЛЬНЫМ. Это необходимо.   -  person IInspectable    schedule 02.01.2014
comment
Не помещайте glew32.dll в папку отладки. MSVC настроен для запуска ваших приложений в корневом каталоге вашего проекта/решения по умолчанию, когда вы запускаете его с помощью встроенной команды отладчика/выполнения. Если вы поместите туда одну копию всех ваших зависимых библиотек DLL, вам не нужно помещать избыточные копии в каждый из каталогов конфигурации сборки (например, Release, Debug, MyCustomBuildConfig).   -  person Andon M. Coleman    schedule 02.01.2014
comment
@drescherjm да. Зачем ты это спрашиваешь?   -  person Jebathon    schedule 02.01.2014
comment
@AndonM.Coleman AndonM.Coleman Я сделал это как решение уже существующей проблемы. Это может помочь, но без него проблема остается прежней.   -  person Jebathon    schedule 02.01.2014
comment
Glew32.lib не входит в состав Windows SDK, его необходимо предоставить самостоятельно. Введите glew32.lib в запросе Google и примите первый удар.   -  person Hans Passant    schedule 02.01.2014
comment
Ошибка инструментов компоновщика LNK1104 перечисляет ряд возможных причин. Сможете ли вы устранить их всех?   -  person IInspectable    schedule 02.01.2014
comment
@HansPassant Я получил OpenGL SDK   -  person Jebathon    schedule 02.01.2014
comment
@IInspectable после некоторых размышлений, глядя на все эти параметры, единственная потенциальная проблема может заключаться в следующем: файл может быть открыт в другой программе, и компоновщик не может записать в него   -  person Jebathon    schedule 02.01.2014
comment
Что ж, не заставляйте нас или компоновщика гадать, куда вы его поместили. Добавьте его в параметр компоновщика «Общие + дополнительные каталоги библиотек».   -  person Hans Passant    schedule 02.01.2014
comment
Это сработало для меня: D Ответ Pan.student на Edward83! stackoverflow.com/questions/16978418/   -  person    schedule 07.01.2015


Ответы (5)


Честно говоря, нет никакой реальной пользы от использования DLL-версии glew (за исключением уменьшенного размера исполняемого файла, но это вряд ли имеет значение на современных ПК с Windows).

Это не похоже на то, что вы можете просто добавить новую версию DLL в свое приложение и использовать расширения, которые вы никогда не использовали раньше. Точно так же исправления ошибок настолько редки/ненужны с библиотекой, которая в основном просто анализирует спецификацию расширения. файлы, использование DLL в качестве средства исправления ошибок загрузки расширений в поставляемом программном обеспечении также нецелесообразно. Статическая привязка к glew (это означает glew32s.lib) имеет гораздо больше смысла в долгосрочной перспективе.

Библиотека статической компоновки также более переносима в Windows, она будет работать с MSVC и MinGW (тогда как библиотека DLL работает только с MSVC). Свяжите с glew32s и поместите его в любой каталог, который вы решили использовать для дополнительных зависимостей библиотеки.


Вот пример конфигурации решения для написанного мной проекта, в котором используется glew. Я установил соглашение для этого конкретного программного обеспечения, где зависимости времени компиляции хранятся в platform/<Subsystem>. Таким образом, у меня есть glew32s.lib (32-разрядная версия) и glew64s.lib (64-разрядная версия) в ./Epsilon/platform/OpenGL/glew{32|64}s.lib.

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

person Andon M. Coleman    schedule 01.01.2014
comment
У меня есть только glew32 (без s) в пакете GLEW 1.10. Можете ли вы уточнить, когда вы имеете в виду статическую ссылку на GLEW? - person Jebathon; 02.01.2014
comment
@BDillan: есть две версии GLEW. Есть версия DLL (динамическая), а есть версия, которая полностью встроена в ваше программное обеспечение при компиляции/связывании (статическая). Я всегда компилирую glew из исходников, но бинарный архив здесь содержит как динамические, так и статические библиотеки: lib/Release/Win32 (32-разрядная версия) и lib/Release/x64 ( 64-разрядная версия). Он использует имя glew32 как для Win32, так и для x64, для своего программного обеспечения я фактически переименовал 64-битную версию, как вы можете видеть на приведенной диаграмме. - person Andon M. Coleman; 02.01.2014

Шаги по использованию классов из другого проекта (добавьте заголовок и ошибки компоновщика решателя)

  1. Чтобы иметь возможность добавить заголовок из другого проекта, сначала перейдите в раздел "Свойства > c++ > Общие > Дополнительные каталоги включения" и добавьте каталог, содержащий заголовок. Теперь вы сможете добавить заголовок класса из другого проекта, но запуск проекта по-прежнему будет вызывать ошибки компоновщика.

  2. Добавьте __declspec(dllexport) перед классом, который вы используете для другого проекта. Это можно добавить в заголовочный файл этого класса. Это должно быть добавлено прямо перед функцией, переменной или именем класса. Теперь вы получите файл lib. (если поместить в неправильное место, вы можете получить это предупреждение: https://msdn.microsoft.com/en-us/library/eehkcz60.aspx)

  3. "Свойства > Компоновщик > Дополнительные каталоги библиотек". Укажите расположение созданного файла lib.

  4. «Свойства > Компоновщик > Ввод > Дополнительные зависимости»: добавьте имя файла lib.

person Mohith Maratt    schedule 29.06.2015

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

Это может помочь.

person FuzzyBunnySlippers    schedule 01.01.2014

Это случилось со мной в этой ситуации, я очищаю решение и собираю его снова, тогда возникает много ошибок, таких как LNK1104.

После попытки перезапустить IIS я успешно строю решение без ошибок LNK1104. Я не знаю почему, но перезапуск IIS занимает гораздо больше времени, чем обычно, поэтому я предполагаю, что что-то используется другим рабочим процессом IIS.

Просто попробуйте, чтобы увидеть, происходит ли это волшебство с вами.

person David    schedule 31.07.2014

Этот вопрос старый и помечен как решенный, но у меня были похожие симптомы проблемы с совершенно другим решением. Итак, на всякий случай, если кто-то еще наткнется здесь:
Оказалось, что, поскольку у меня было 2 проекта под одним решением (dll и exe), порядок сборки был смешанным (из окна вывода):

1> Rebuilding project1..
2> Rebuilding project1..
1> file1.cpp
2> file1.cpp

и так далее. Судя по скопированному сообщению, у вас тоже есть более одного проекта в рамках одного решения. Один проект искал файл *.lib, который еще не был создан в другой сборке.
Решение:
Щелкните правой кнопкой мыши «основной» проект -> Зависимости сборки -> Зависимости проекта.. -> Отметьте, какой проект главное зависит от.

person yoad w    schedule 29.08.2017