использование libcurl без dll

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

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

9
задан Iron 5 August 2010 в 02:08
поделиться

1 ответ

Однозначного ответа нет :) 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 "УСТАНОВОЧНОГО файла).

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

13
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: