PDA

Просмотр полной версии : Dev-C++ & Curl [ статическая линковка ] how-to


Whirt
15.06.2010, 00:52
Как установить Curl+Zlib+libSSL для IDE Dev C++ и статически прилинковать.

/Dislaimer/
Извините, не знал куда закинуть. Сам я только начинаю знакомство с C, поэтому я буду рад если вы поправите меня в неточностях. How-to не претендует на полноту и точность, и вообще ни на что не претендует - просто передо мной встала проблема использования Curl-а для одного проекта C++, готового решения под Dev C++ не нашел, находились только варианты подгрузки DLL - но мне они не подходили.

Надеюсь, кому нибудь пригодится опыт.

To-Do:

1) Скачиваем Dev C++ (http://www.bloodshed.net/) (у меня установлена wxDev-C++, но подойдет и обычная)
2) Идем: http://curl.haxx.se/download.html
Скачиваем:
Win32 2000/XP 7.20.1 libcurl
3) Скачиваем и устанавливаем OpenSSL и Zlib
(http://www.shininglightpro.com/products/Win32OpenSSL.html)
(http://sourceforge.net/projects/gnuwin32/files/zlib/1.2.3/zlib-1.2.3.exe/download)

4) Копируем все что в папке include у Curl'а в include папку Dev C++
5) Копируем все что в lib (*.a - файлы) у Curl'а в lib-каталог Dev C++
6) Создаем новый проект , добавляем в самом верху c-файла:
#define CURL_STATICLIB
7) Идем в Tools->Compiler Options

Видим второй сверху textarea (над ним надпись: Add these commands to the linker command line).

Вписываем туда: -lcurl -lws2_32 -lidn -lssl32 -lssh2 -leay32 -lwldap32

(возможно я перемудрил немного с библиотеками - поправьте если что,- но без этих либ у меня собираться не хотело)

8) И еще важный момент: Project->Project Options->Parameters,
нажимаем: Add Library or Object , и указываем путь к файлу libz.a
(у меня он получился: ""C:/Program Files/GnuWin32/lib/libz.a"")

9) Все, можно собирать. Ошибок теперь быть не должно.
Правда exe-шничек неплохо вырастет, у меня получился около 600 кб, зато теперь Curl+Zlib на борту :)

p.s.

Самый простой код - для проверки на ошибки при сборке:

#define CURL_STATICLIB
#include <curl/curl.h>

int main(void) {
CURL *curl;
curl = curl_easy_init();
return 0;
}