Почему DLL не может быть использован в C ++? - PullRequest
2 голосов
/ 28 марта 2010

На это указывает ответ:

Не удалось связать mysql5.1.39 \ bin \ libmySQL.dll

Но я не понимаю, почему, .dll по сути то же самое, что и .lib, за исключением того, что только одна его копия используется разными процессами.

Это имеет какое-либо отношение к IDE? Я использую Visual C ++ 2008 Express

UPDATE

Кто-нибудь знает бесплатный инструмент для преобразования .dll в .lib в Windows?

Ответы [ 5 ]

5 голосов
/ 28 марта 2010

Вы не правы по двум причинам. Во-первых, DLL и LIB (статические библиотеки) очень разные звери. LIB, о которой вы говорите (я думаю) - это библиотека экспорта, которая представляет собой просто список имен в DLL. Эта библиотека обычно создается при компиляции библиотеки DLL и поставляется вместе с библиотекой DLL, если она предназначена для связи с другими разработчиками.

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

И, во-вторых, библиотеки DLL могут использоваться с C ++.

0 голосов
/ 28 марта 2010

Вы можете использовать следующую аналогию, чтобы понять разницу между DLL и файлом lib.

dll похож на исходный файл .cpp, в то время как lib - файл заголовка .h 1003 *

Хотя это не совсем так, DLL содержит исполняемый код, а файл LIB сообщает компоновщику, как склеивать код.

Также возможно (в некоторых случаях) генерировать lib из dll . По сути, все, что вам нужно знать для вызова функции, - это точка входа в dll, количество параметров и размер каждого параметра. Отправка соответствующей информации - ваша собственная проблема.

0 голосов
/ 28 марта 2010

Чтобы использовать DLL в C / C ++, вам нужно связать с так называемой import lib . Это небольшой .lib, содержащий имена / порядковые номера, которые экспортирует DLL в формате, понятном компоновщику. Как только это будет связано, получающийся двоичный файл сможет использовать DLL. Если у вас нет соответствующей библиотеки импорта, ваш компилятор C / C ++ должен иметь инструмент для его генерации из DLL.

0 голосов
/ 28 марта 2010

Основная причина, вероятно, связана с тем, что dll-файл является выводом компоновщика (link.exe). Эта утилита командной строки не знает, как читать DLL, только как их писать.

На самом деле иногда .lib-файлы содержат больше, чем список функций. Например, libpng.lib работает как отдельный файл, без файла DLL.

0 голосов
/ 28 марта 2010

DLL - это конкретные исполняемые файлы Windows, которые загружаются во время выполнения. В Linux их эквивалентом является * .so.
Если вы хотите понять, в чем разница между DLL и статической библиотекой , см. Здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...