![]() |
Static library CURL?
Как можно прилепить CURL в прогамме, чтоб все было в одном файле, без надобности таскать libcurl.dll
Реально ли это? Я скачал исходнички CURL, собрал с помощью Dev-C++ mingw32 На выходе получились: libcurl.a 298 КБ libcurl.dll 207 КБ libcurldll.a 35,8 КБ Если собирать прогу с помощью libcurldll.a, то все отлично компилится, прога получается 6 Кб, но требует наличия libcurl.dll А вот как собрать с помощью libcurl.a ? Пофиг что прога больше получится, это не критично. Нашел в инете про ключик -DCURL_STATICLIB, но незнаю как и где его применить Джоин EXE+libcurl.dll не предлагать, охота все по-грамотному сделать |
1. LoadLibrary('libcurl.dll');
DLL, положить в папку с прогой 2. Сделать импорт необходимых функций из libcurl.dll, статически или динамически |
2 вопрос:
Dev-cpp 4.9.9.2 вставляет в каждый экзешник текст: Код:
-LIBGCCW32-EH-2-SJLJ-GTHR-MINGW32 w32_sharedptr->size == sizeof(W32_EH_SHARED) %s:%u: failed assertion `%s' |
1. LoadLibrary('libcurl.dll');
Не катит. Я же как раз спрашиваю как избавиться от необходимости libcurl.dll 2. Сделать импорт необходимых функций из libcurl.dll, статически или динамически Динамически - не интересует Статически - не умею, объясни подробнее, если не сложно |
Цитата:
Цитата:
C++: extern "C" __declspec(dllimport)double AddNumbers(double a, double b); Но, как я понял, тебя это не интересует, ибо ты хочешь избавиться от этой либы |
Чтобы перенести весь функционал из libcurl.dll в свою прогу, нужно собрать прогу со статической библиотекой curl. При сборке curl из исходников генерится файл libcurl.a, размер которого даже немного превышает libcurl.dll. Интуиция подсказывает что в нем содержится весь функционал. Но вот как его подключить к проекту, я не знаю.
Если в линкере поменять libcurldll.a на libcurl.a, то выдается куча ошибок что функции для curl не определены |
Вот нашел, кажется то что нужно.
http://lenkite.blogspot.com/2007/11/quickstart-libcurl-and-mingw-plain-http.html Но у меня не пашет, выдает кучу ошибок Z:\PROJECT\curl-7.19.6\docs\examples>gcc -DCURL_STATICLIB -I ..\..\include simple.c ..\..\lib\libcurl.a -lws2_32 -lwinmm -o simple ..\..\lib\libcurl.a(ldap.o)(.text+0x29b): undefined reference to `_imp__ldap_set_optionA' ..\..\lib\libcurl.a(ldap.o)(.text+0x2be): undefined reference to `_imp__ldap_initA' ..\..\lib\libcurl.a(ldap.o)(.text+0x2e2): undefined reference to `_imp__ldap_set_optionA' ..\..\lib\libcurl.a(ldap.o)(.text+0x31e): undefined reference to `_imp__ldap_simple_bind_sA' ..\..\lib\libcurl.a(ldap.o)(.text+0x37d): undefined reference to `_imp__ldap_search_sA' ..\..\lib\libcurl.a(ldap.o)(.text+0x3b0): undefined reference to `_imp__ldap_first_entry' ..\..\lib\libcurl.a(ldap.o)(.text+0x3e4): undefined reference to `_imp__ldap_get_dnA' ..\..\lib\libcurl.a(ldap.o)(.text+0x45f): undefined reference to `_imp__ldap_first_attributeA' ..\..\lib\libcurl.a(ldap.o)(.text+0x486): undefined reference to `_imp__ldap_get_values_lenA' ..\..\lib\libcurl.a(ldap.o)(.text+0x5f8): undefined reference to `_imp__ldap_value_free_len' ..\..\lib\libcurl.a(ldap.o)(.text+0x62a): undefined reference to `_imp__ldap_memfreeA' ..\..\lib\libcurl.a(ldap.o)(.text+0x644): undefined reference to `_imp__ldap_next_attributeA' ..\..\lib\libcurl.a(ldap.o)(.text+0x65b): undefined reference to `_imp__ldap_memfreeA' ..\..\lib\libcurl.a(ldap.o)(.text+0x679): undefined reference to `_imp__ldap_next_entry' ..\..\lib\libcurl.a(ldap.o)(.text+0x68d): undefined reference to `_imp__ldap_err2stringA' ..\..\lib\libcurl.a(ldap.o)(.text+0x6db): undefined reference to `_imp__ldap_unbind_s' ..\..\lib\libcurl.a(ldap.o)(.text+0x741): undefined reference to `_imp__ldap_msgfree' ..\..\lib\libcurl.a(ldap.o)(.text+0x777): undefined reference to `_imp__ldap_err2stringA' ..\..\lib\libcurl.a(ldap.o)(.text+0x7bb): undefined reference to `_imp__ldap_set_optionA' ..\..\lib\libcurl.a(ldap.o)(.text+0x7ee): undefined reference to `_imp__ldap_simple_bind_sA' ..\..\lib\libcurl.a(ldap.o)(.text+0xa30): undefined reference to `_imp__ber_free' ..\..\lib\libcurl.a(ldap.o)(.text+0xa41): undefined reference to `_imp__ldap_err2stringA' collect2: ld returned 1 exit status |
Уря! Как всегда - нашел решение сам =D
http://article.gmane.org/gmane.comp.gnu.octave.maintainers/9640 Надо было добавить еще ключик -lwldap32 В итоге: gcc -DCURL_STATICLIB -I ..\..\include simple.c ..\..\lib\libcurl.a -lws2_32 -lwinmm -lwldap32 -o simple Создает прогу размером 260 Кб, которая не нуждается в libcurl.dll |
Чтобы это дело компилилось в Dev-cpp, надо:
1. Создать C-проект 2. Проект - Параметры проекта (Alt + P) - Вкладка параметры В поле "компилятор" дописать -DCURL_STATICLIB В "компоновщик" -lcurl -lws2_32 -lwldap32 И закинуть libcurl.a в папку C:\Dev-Cpp\lib В проге #include <curl/curl.h> ну и дальше как обычно работать с CURL |
А можно как-нибудь собрать CURL без поддержки многопоточности?
|
| Время: 16:50 |