Я не могу связать opengl32 в Windows

Я работаю над переносом своего приложения, которое я сделал в OS X, на Windows 10. Я использую Visual Studio 2015 Community Edition.

Чтобы запустить проект, мне нужно связать с GLFW, а в Windows, как я понимаю, с GLEW, так как я ориентируюсь на GL 4.5.

Итак, у меня есть библиотеки glfw и glew. Я также использую Cygwin, поэтому у меня установлены библиотеки в usr/local/(bin | lib | include), чтобы имитировать структуру папок, которую я бы использовал в OS X для этих библиотек.

Проблема, с которой я сталкиваюсь, связана с самой библиотекой opengl.

До вчерашнего дня мне удавалось компилировать мой проект и инициализировать окно glfw со следующими настройками визуальной студии:

Проект->Свойства-> :

C++->Общие:

Дополнительные каталоги включения:

C:\cygwin64\usr\local\include

Linker->Общие:

Дополнительные каталоги библиотек:

C:\cygwin64\usr\local\lib
C:\cygwin64\usr\local\bin

Linker->Ввод:

opengl32.dll
glew32s.lib
glfw3.lib

Первое, на что следует обратить внимание, это то, что я связывался с opengl32.dll, а не с .lib. Я видел кучу вопросов / сообщений в Интернете, в которых говорится, что при установке Windows SDK у вас есть opengl32.lib в Program Files/Microsoft SDK/Windows (x86 или иначе). Это не относится ко мне. Я даже переустановил Windows 10 SDK, и он нигде не устанавливает никакой библиотеки opengl, ни статической, ни динамической.

Так что я почти уверен, что моя dll opengl исходила из Windows/System32, потому что это единственное место на всей машине, где есть какая-либо библиотека opengl.

Что заставляет меня думать, что у меня также могло быть C:\Windows\System32 в разделе каталогов дополнительных библиотек компоновщика. Я говорю, что заставляет меня задуматься, потому что около недели назад я создал это с большим трудом. С тех пор я смог нормально развиваться.

Прошлой ночью все, что я сделал, это передал свою работу в ветку git, переключился на другую ветку и слился с этой веткой. После слияния все настройки компоновщика Visual Studio/C++ были стерты. Поэтому мне пришлось воссоздать их, как я показал выше.

Теперь происходит следующее: если я включаю C:\Windows\System32, а opengl32.dll VS выдает:

LNK1107 invalid or corrupt file: cannot read at 0x2E0   OpenVRTest  C:\Windows\System32\opengl32.dll

И если я не включу его, очевидно, что половина вещей в glfw не будет решена.

Любые намеки на то, как заставить это работать снова? Для меня это не имеет смысла ... Он работал нормально, и он должен был нормально работать с этим opengl32.dll.

Кроме того, в качестве примечания, я не уверен, почему люди настаивают на том, чтобы установка Windows SDK устанавливала статическую версию gl lib; по крайней мере, это не для меня.


person SaldaVonSchwartz    schedule 02.09.2016    source источник


Ответы (2)


Линкер-> Ввод:

opengl32.dll
glew32s.lib
glfw3.lib

Это opengl32.dll неправильно. При разработке для Windows компоновщик всегда принимает .lib файла. В случае статических библиотек .lib содержит фактический двоичный файл библиотеки. В случае DLL соответствующий .lib информирует компоновщика о том, какую DLL использовать и какие символы она предлагает.

Основная причина этого конкретного выбора того, как все должно быть сделано, заключалась в том, что при разработке Windows можно будет связываться с DLL, не имея фактической DLL.

Также системные библиотеки всегда имеют суффикс …32 даже в 64-битных системах.

person datenwolf    schedule 02.09.2016
comment
Давайте получим эту информацию правильно. В Windows есть два типа статических библиотек, обе с расширением .lib. Один используется для статической компоновки (это то, что ищет @SaldaVonSchwartz), а другая представляет собой библиотеку импорта, используемую для динамической компоновки (для совместного использования кода в DLL путем выполнения процесса). Салда фон Шварц, друг мой, ты прав. Я установил Visual Studio 2017, и вместе с ним поставляется 4 версии SDK. Ни один из них не поставляется со статическими библиотеками, которые вы ищете. Бла. - person BoiseBaked; 27.05.2017

Проблема заключалась в том, что среди настроек конфигурации VS, которые были стерты, была пара вещей, связанных с настройками платформы x86 и x64. Таким образом, проект теперь пытался собрать 64-битную компоновку с 32-битной dll в System32.

Так вот что.

Отдельный вопрос, почему во многих ответах говорится об opengl32.lib (статическом), который теоретически поставляется с Windows SDK, но я его нигде не видел. Я просто ссылаюсь на динамическую.

person SaldaVonSchwartz    schedule 02.09.2016
comment
Забавный факт: даже в 64-битной Windows системные библиотеки имеют суффикс …32. А в Windows компоновщик всегда(!) (без исключений) принимает .lib файлов. В случае динамически подключаемых библиотек эта статическая библиотека содержит информацию о том, какую DLL связать и какие символы она предлагает. - person datenwolf; 02.09.2016
comment
При разработке Windows файл .lib не находится в ваших системных каталогах, а является частью дистрибутива компилятора. Таким образом, вы можете найти его где-нибудь в структуре каталогов, в которой установлен набор инструментов вашего компилятора. - person datenwolf; 02.09.2016
comment
так почему меня минусовали? лол ... 1- да, проблема была в том, что мои настройки VC пошли к черту, а настройки архитектуры между 64 и 86 теперь были одинаковыми, поэтому я связывался с другими библиотеками, которые были 64 и собирались для 32. Так что не знаю, как это не ответ. Это именно то, в чем была моя проблема. 2- Что касается информации о dll внутри статики, это здорово знать, но если я скажу VS связать с Sysmte32/opengl32.dll, он сработает, и если я скажу связать его с opengl32.lib, он не найдет его, и я сделал поиском по всем каталогам тоже не нашел. - person SaldaVonSchwartz; 03.09.2016