Почему для работы curl требуются как .lib, так и .dll? - PullRequest
0 голосов
/ 15 июля 2010

Я только что скачал curl и сумел построить с ним программу.

Что я не понимаю, так это то, почему для этого требуются curllib.lib и curllib.dll?

По моему мнению, либо curllib.lib, либо curllib.dll должно быть достаточно, почему оба?

Также я искал источник, но нигде не нашел, чтобы он загружал dlopencurllib.dll, так почему curllib.dll требуется для запуска?

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

curllib.lib - библиотека импорта. Он содержит заглушки для всех функций, чей фактический код находится в DLL, и содержит код для загрузки DLL. .lib автоматически генерируется системой сборки (например, Visual Studio), поэтому в коде вы не найдете никаких ссылок. Однако вы найдете некоторые директивы, которые сообщают компилятору / компоновщику об экспорте определенных функций:

  • __declspec(dllexport) в объявлении функции экспортирует эту функцию. Это удобно, но специфично для Microsoft. Например:

    void __declspec(dllexport) foobar(int qux);

    Больше информации здесь .

  • В качестве альтернативы можно использовать файл .def, в котором явно перечислены все экспортируемые функции. Например:

    LIBRARY MYFOO
    EXPORTS
    foobar @1

    Подробнее здесь .

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

1 голос
/ 15 июля 2010

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

Другие системы (например, Linux) хранят полную информацию о связях в общих библиотеках и не требуют этого.

0 голосов
/ 15 июля 2010

Когда вы используете DLL в Windows, вы обычно используете ее с файлом .lib, который сообщает компоновщику достаточно для создания исполняемого файла.Затем исполняемый файл использует файл .dll во время выполнения.

OTOH, dlopen - это вещь UNIX / Linux / POSIX - эквивалент в Windows будет LoadLibrary.Обычно вы используете dlopen с файлом .so.

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