Вспоминаем Си. Подключаем библиотеки CURL, Zlib, PCRE, OpenSSL и SQLite

Задался целью статично собрать все части в один исполняемый файл.. Зачем? .. Сам не знаю, может для того, чтобы не таскать с собой дополнительные .dll-файлы. Конечно это отрицательно сказывается на своевременном апдейте приложения, с каждой новой версией любой из частей нужно будет снова все компилить и собирать.

Zlib:
в сборке ничего сложного не оказалось, все уже включено внутри, для создания статик библиотеки в файле win32/Makefile.msc надо флаг -MD заменить на -MT , далее в консоли надо прописать:

nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"

как результат получаем файлик zlib.lib

OpenSSL:
Для сборки библиотеки потребуется интерпретатор PERL и компилятор NASM, после создания nt.mak, я его подправил, убрал флаги /Zi при компиляции (размер библиотек существенно уменьшился)

ms\do_nasm.bat
nmake -f ms\nt.mak

тут мы получим два файла: libeay32.lib и ssleay32.lib

CURL:
тут также все просто:

nmake -f Makefile.vc9 cfg=release-ssl-zlib \
     OPENSSL_PATH=..\..\__openssl  \
     ZLIB_PATH=..\..\__zlib \
     WINDOWS_SDK_PATH=c:\SDKv7 \
     RTLIBCFG=static

получаем: libcurl.lib

PCRE:
а с этим пришлось немного повозиться, скачиваем вот это, распаковываем в каталог с исходниками, переименовываем config.h.generic и pcre.h.generic в config.h и pcre.h, соответственно, далее:

nmake

получаем: pcre.lib

SQLite:
тут вообще никаких проблем, в своем проект подключаем прилагаемые хедеры и сырец.

итак, все сделано, для того, чтобы наш проект все это в себя включил компилим его примерно так:

cl /nologo /c /O2 /MT /D_MT /EHsc /DCRTAPI1=_cdecl /DCRTAPI2=_cdecl /DWIN32
   /D_WIN32 /D_WINNT /D_WIN32_WINNT=0x0500 sqlite3.c

cl /nologo /c /O2 /MT /D_MT /EHsc /DCRTAPI1=_cdecl /DCRTAPI2=_cdecl /DWIN32
   /D_WIN32 /D_WINNT /D_WIN32_WINNT=0x0500 /DHAVE_ZLIB_H /DHAVE_ZLIB
   /DHAVE_LIBZ /DUSE_SSLEAY /DCURL_STATICLIB /DPCRE_STATIC наш_сырец.cpp

link /nologo /release /subsystem:console /manifest:no наш_сырец.obj
     sqlite3.obj advapi32.Lib ws2_32.lib wldap32.lib kernel32.lib user32.lib
     gdi32.lib zlib.lib ssleay32.lib libeay32.lib pcre.lib libcurl.lib

Ну и напоследок, кому лень все это делать — можете взять здесь
Содержит:

zlib-1.2.5
openssl-1.0.0a
libpcre-8.10
libcurl-7.21.0
Запись опубликована в рубрике Программирование с метками , , , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий