используя libcurl без dll - PullRequest
       27

используя libcurl без dll

9 голосов
/ 05 августа 2010

Я использую Microsoft Visual C ++ 2010, и мне нужно создать приложение, которое не требует libcurl dll.Я определяю CURL_STATICLIB в директивах препроцессора и ссылаюсь на libcurl.lib, libcurl_static.lib, ws2_32.lib и winmm.lib, но для работы библиотеки все равно требуетсяЕсли я только ссылаюсь на libcurl_static.lib, он имеет неопределенные внешние ошибки символов.Как я могу заставить его работать?

Я также пытался создать исходный код, но я получаю 13 ошибок (вау, неудачное число), которые все говорят "ошибка C2011: 'pollfd': 'struct' redefinition type".Может ли кто-нибудь помочь мне заставить работать libcurl?

Ответы [ 2 ]

12 голосов
/ 06 августа 2010

Простого ответа не существует :) Libcurl зависит от сторонних библиотек (это зависит от используемого вами бинарного дистрибутива).Как только вы избавитесь от DLL - вам придется вручную связываться с соответствующими третьими сторонами.

Хорошо, поэтому первое, что вам не нужно делать, - не ссылаться на libcurl.lib , поскольку он связываетсяк DLL, которую вы не хотите.

Второй момент - когда вы связываетесь с libcurl_static.lib , тогда (как упоминалось выше) вам также придется связываться с библиотекамизависит от.Простой способ сделать это - сделать что-то вроде этого:

#if defined CURL_STATICLIB

#if defined _DEBUG
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Debug\\curllib_static.lib")
#else
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Release\\curllib_static.lib")
#endif

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\libeay32.lib")
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\openldap.lib")
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\ssleay32.lib")

#endif

Но так - вы получите еще три зависимости.Кроме того, вы можете искать способ статической связи с ними, но это другая история.

В качестве другой альтернативы - вы можете перестроить libcurl_static.lib из источников после отключения всех функций.таким образом, вам не нужно удалять нежелательные зависимости (как описано в « Отключение определенных протоколов в сборках Win32 » файла INSTALL).

И последний момент - поскольку libcurl имеет довольно слабую поддержку для оконКомпиляция из источников, я бы порекомендовал вам вернуться к идее избавления от curllib.dll .

1 голос
/ 17 декабря 2012

Я получил статическую сборку libcurl для компиляции и компоновки, указав HTTP_ONLY и CURL_STATICLIB в директивах препроцессора проекта libcurl и моего приложения.Это устраняет все зависимости, требуемые протоколами, которые вам, вероятно, не нужны.Теперь приложение работает без каких-либо библиотек DLL.

Помимо вышесказанного, мне просто нужно было убедиться, что libcurl.lib и путь к включаемым файлам curl были заданы в настройках проекта приложения Visual Studio.

Ссылки, которые я использовал:

Отключение определенных протоколов в сборках Win32: http://curl.haxx.se/mail/lib-2011-12/0123.html

Использование libcurl в Visual Studio (устарело): http://curl.haxx.se/libcurl/c/visual_studio.pdf

...