Как мне найти зависимости на dll :: GLUT конкретно - PullRequest
1 голос
/ 12 ноября 2010

Я изучаю OpenGL около 4-5 месяцев.Я готов прекратить использовать glut (вспомогательная библиотека, которая запутывает многие сложные / утомительные аспекты программирования opengl)

Проблема в том, Я чувствую, что удалил все ссылки на glut.h, так кактакже, как и все вызовы функций внутри glut, но когда я запускаю свое приложение, оно все еще пытается связаться с glut32.dll.

В общем, чтобы я и другие могли узнать позже, как я могу определить, какие библиотеки являются исполняемыми /исходный код нужен и зачем (функция / заголовок), до или после компиляции?

Я использую VS2010, но кросс-компиляцию на Linux-коробке с g ++. В этом конкретном случае у меня нет dll в списке в качестве дополнительной зависимости.Но я вижу glut.h в папке внешних зависимостей ... Я просто не могу удалить его

Спасибо

Ответы [ 4 ]

3 голосов
/ 12 ноября 2010

Dependency Walker - ваш друг для изучения зависимостей dll скомпилированных двоичных файлов.

Основная проблема, конечно, в том, что вы добавили glut.lib или glut32.lib в ваш проект. Вероятно, это в «Свойствах проекта»> «Настройки компоновщика»> «Дополнительные библиотеки», или в каком-нибудь исходном файле есть #pragma, например: -

#pragma comment(lib, "glut32.lib")
2 голосов
/ 12 ноября 2010

Посмотрите на свойства компоновщика для вашего проекта (ов).DLL, или, скорее, соответствующий .lib должен быть указан там под «дополнительными зависимостями».

Редактировать:

Кстати, включая заголовок и ссылку на библиотеку (или DLL)это две разные вещи.Возможно, вы где-то включаете заголовок, но не ссылаетесь на соответствующую библиотеку.В этом случае компоновщик выдаст вам ошибку.С другой стороны, вы можете не включать заголовок и вообще не использовать библиотеку, но вы все равно можете ссылаться на нее.

В этом случае кажется, что у нас есть оба.Если glut.h находится в папке внешних зависимостей, то вы должны включить его где-то в свой код.Попробуйте использовать поиск в файлах, чтобы найти его.Или полностью удалите его из своей системы и попробуйте скомпилировать.

1 голос
/ 12 ноября 2010

Каждый exe / dll имеет что-то, называемое Import Address Table (IAT), которое представляет собой информацию, хранящуюся в заголовке файла PE (Portable Executable: формат исполняемого файла окна) о том, что dll нужен загрузчику при загрузке соответствующего модуля,Вы можете использовать такие инструменты, как PE Viewer или PE Explorer, чтобы просмотреть эту информацию или написать собственную (это сложнее).То, что вы увидите, это библиотеки, которые статически связаны с вашим исполняемым файлом.Если вы не видите glut32.dll ни в одном из этих файлов, возможно, он динамически загружается через API LoadLibrary в какой-то другой библиотеке openGL.Я не очень знаком с бинарными файлами openGL, поэтому не могу подтвердить это для вас.

0 голосов
/ 12 ноября 2010

Если у вас возникли проблемы с поиском, где glut.lib скрыт в опциях проекта Visual Studio, откройте .vcproj в стандартном текстовом редакторе и выполните полнотекстовый поиск.

...