2013-05-05 4 views
0

Я заметил, что вам не нужно связывать opengl32.lib самостоятельно, когда вы используете библиотеки, такие как SFML, и мне действительно интересно, как это могло быть, поскольку мне нужно связать opengl32 в моих проектах, которые используют мою собственную мультимедийную библиотеку которая является статической библиотекой? Это просто потому, что библиотека SFML является динамической библиотекой, а opengl32 связан в проекте SFML? Это не вопрос SFML, это скорее вопрос обо всех DLL вообще.Связаны ли динамические библиотеки с другими библиотеками?

ответ

1

Если динамическая библиотека использует другую динамическую библиотеку, она автоматически загружается в процесс, да.

+0

Не должно ли это сделать проще для разработчиков, которые используют мою мультимедийную библиотеку? Я имею в виду, я думаю, им даже не нужны необходимые библиотеки, с которыми мне приходилось связываться, когда я создавал мультимедийную DLL. Например, freetype? – grimgrom

+0

Да, он может это достичь. Вы, конечно же, не хотели бы знать полный список библиотек, какую библиотеку вы использовали, чтобы использовать свои собственные зависимости. Конечно, если вы создаете свою собственную мультимедийную DLL, то, надеюсь, вы СКРЫВАете то, что она на самом деле использует, и не «пропускает» ваш код клиента, что те библиотеки, которые вы используете (я имею в виду, вы не хотите, чтобы код клиента чтобы использовать freetype, правильно - они просто говорят: «Я хочу текст в Courier Bold, размер 10» (в некотором роде), а затем код клиента отправляет строку, которая будет напечатана ...) –

+0

Точно. Этого я хочу достичь. Будет ли это по умолчанию, когда я создам динамическую библиотеку через vC++ или gcc? Думаю, мне просто нужно использовать статическую библиотечную версию freetype? – grimgrom

2

Да, DLL может ссылаться на другие библиотеки DLL, иначе статически компилировать их внутренне. Чтобы проверить внешние зависимости, Microsoft давно разработала инструмент под названием Dependency Walker, в котором вы можете перетащить DLL или исполняемый файл и посмотреть, от каких DLL он зависит (и, следовательно, автоматически загружается). Инструмент обычно поставлялся с Visual Studio по умолчанию, но теперь вы можете использовать download it from here for free. Эта страница объясняет все остальное.

+0

Хорошо спасибо. Но означает ли это, что пользователю моей мультимедийной библиотеки нужны файлы .DLL на своем компьютере, которые я скомпилировал внутри? Я думаю, что freetype - хороший пример. – grimgrom

+0

Если вы динамически связали его, ваша собственная библиотека DLL будет содержать только ссылки на символы, так что да, вам также необходимо отправить соответствующую DLL или установить ее отдельно. Ничего особенного здесь нет, например, DirectX. –

Смежные вопросы