нужна ли dll во время выполнения, если включена библиотека?

#c #dll #linker

#c #dll #компоновщик

Вопрос:

Я хочу создать .dll (на C ), который использует RAPI. Для этого я создаю проект visual Studio, а затем устанавливаю дополнительные включаемые каталоги в то место, где у меня есть необходимый «rapi2.h», а также дополнительные каталоги ссылок на место, где находится rapi.lib.

Затем я пишу другое приложение, используя мое созданное.dll-файл. Этот метод работает нормально, но во время выполнения мне нужно rapi.dll должна существовать на компьютере, на котором запущено мое приложение.

Есть ли какой-либо способ добавить .dll в другой .библиотеки DLL, первая из которых не нужна во время выполнения?

Возможно, это вопрос для начинающих, но почему мне нужна dll во время выполнения, но при компиляции достаточно только .lib и .h, связанных?

Комментарии:

1. lib Не подразумевает статическую ссылку — ее можно использовать как для статических, так и для динамических ссылок. Это просто для разрешения ссылок.

Ответ №1:

Вам нужно понимать разницу между динамическим связыванием и статическим связыванием. В вашем случае библиотека является только библиотекой импорта и не содержит фактического исполняемого кода. Это динамически связано во время выполнения.

Комментарии:

1. Я прочитал статью. теперь все более понятно. И как я могу выполнить статическое связывание, предпочтительно используя Visual Studio?

2. Вы можете статически связать, только если предоставлена статическая библиотека. Например, если бы существовала библиотека импорта rapi.lib и статическая библиотека rapi.lib (которая содержала код, найденный в rapi.dll ). Обычно это не делается в Windows. Если вызываемый вами код находится в rapi.dll только тогда у вас нет выбора, кроме как использовать это . dll, если только вам не пришлось переписывать все экспортированные функции самостоятельно.

3. Теперь все понятно, даже разница между библиотекой импорта и статической библиотекой. Большое спасибо!