openssl 1.0.2 использует протокол Tlsv1.2 и мы хотим разобраться в исходниках openssl как это реализовано.
Тут речь о том как настроить проект pro для сборки самой библиотеки из исходников в среде Qt Creator. Делать это в принципе не обязательно. То есть это только для общего развития. Так как ssleay32 собирается прекрасно из поставки , главное чтобы настройки сборки (тулчейн) был одинаковый в qt и в openssl.
В исходниках openssl 1.0.2 есть каталог crypto, который содержит всю крипто функциональность. Именно исходники этого каталога создают библиотеку libeay.
eay - Eric Andry Young (создатель этой библиотеки).
Итак мы собрали сначала openssl 1.0.2 штатно под Windows 10-64 с помощью Perl ,подготовили Makefile-ы для всех каталогов openssl с исходниками и собрали сам openssl из командной строки. Все собралось нормально. Получили библиотеку libeay32.dll и ssleay32.dll .
Теперь мы начинаем собирать исходники ssleay.lib под Qt Creator 2.4.1 на Qt 4.8.1.

Примечание: на Windows 10 -64 установили MicroSoft Visual Studio 2010 Ultimate .
Для этого тупо сначала переносим файлы из каталога crypto в новый проект Qt.
В отличии от openssl (с Perl) в Qt creator мы должны использовать qmake для управления проектами.

Файл проекта crypto.pro в итоге получится такой :
TARGET = libeay32
TEMPLATE = lib
QT -= gui
CONFIG = staticlib # !!!!! будет lib , а не dll !!!!
INCLUDEPATH = $$PWD/.. $$PWD/../ms
DEPENDPATH = $$PWD/..
DEFINES = OPENSSL_THREADS DSO_WIN32 OPENSSL_SYSNAME_WIN32 WIN32_LEAN_AND_MEAN L_ENDIAN _CRT_SECURE_NO_DEPRECATE _WINSOCK_DEPRECATED_NO_WARNINGS OPENSSL_USE_APPLINK OPENSSL_NO_RC5 OPENSSL_NO_MD2 OPENSSL_NO_SSL2 OPENSSL_NO_KRB5 OPENSSL_NO_JPAKE OPENSSL_NO_WEAK_SSL_CIPHERS OPENSSL_NO_STATIC_ENGINE OPENSSL_NO_RC5
win32:LIBS = ws2_32.lib gdi32.lib advapi32.lib crypt32.lib user32.lib
OBJECTS_DIR = tmp\\obj\\$$out_dir
MOC_DIR = tmp\\moc\\$$out_dir
RCC_DIR = tmp\\rcc\\$$out_dir
include(my_windows/my_windows.pri)
include(../ms/ms.pri)
include(aes/aes.pri)
include(asn1/asn1.pri)
include(bf/bf.pri)
include(bio/bio.pri)
include(bn/bn.pri)
include(buffer/buffer.pri)
include(camellia/camellia.pri)
include(cast/cast.pri)
include(cmac/cmac.pri)
include(cms/cms.pri)
include(comp/comp.pri)
include(conf/conf.pri)
include(des/des.pri)
include(dh/dh.pri)
include(dsa/dsa.pri)
include(dso/dso.pri)
include(ec/ec.pri)
include(ecdh/ecdh.pri)
include(ecdsa/ecdsa.pri)
include(engine/engine.pri)
include(evp/evp.pri)
include(hmac/hmac.pri)
include(idea/idea.pri)
#include(jpake/jpake.pri)
include(krb5/krb5.pri)
include(lhash/lhash.pri)
#include(md2/md2.pri)
include(md4/md4.pri)
include(md5/md5.pri)
include(mdc2/mdc2.pri)
include(modes/modes.pri)
include(objects/objects.pri)
include(ocsp/ocsp.pri)
include(pem/pem.pri)
include(pkcs7/pkcs7.pri)
include(pkcs12/pkcs12.pri)
include(pqueue/pqueue.pri)
include(rand/rand.pri)
include(rc2/rc2.pri)
include(rc4/rc4.pri)
#include(rc5/rc5.pri)
include(ripemd/ripemd.pri)
include(rsa/rsa.pri)
include(seed/seed.pri)
include(sha/sha.pri)
include(srp/srp.pri)
#include(store/store.pri) no-store
#include(threads/threads.pri)
include(ts/ts.pri)
include(txt_db/txt_db.pri)
include(ui/ui.pri)
include(whrlpool/whrlpool.pri)
include(x509/x509.pri)
include(x509v3/x509v3.pri)
include(err/err.pri)
HEADERS = cryptlib.h \
buildinf.h \
md32_common.h \
o_time.h \
o_str.h \
o_dir.h \
crypto.h \
opensslv.h \
opensslconf.h \
ebcdic.h \
symhacks.h \
ossl_typ.h \
../e_os.h \
bn_int.h \
vms_rms.h \
sparc_arch.h \
ppc_arch.h \
fips_err.h \
constant_time_locl.h \
arm_arch.h
SOURCES = cryptlib.c \
mem.c \
mem_clr.c \
mem_dbg.c \
cversion.c \
ex_data.c \
cpt_err.c \
ebcdic.c \
uid.c \
o_time.c \
o_str.c \
o_dir.c \
o_fips.c \
o_init.c \
fips_ers.c \
my_123_my.c \
getenv.c
include(stack/stack.pri)
win32 {
RC_FILE = ../ms/version32.rc
}
win32{
CONFIG = embed_manifest_exe
}
В проекте crypto.pro создаем ветки (типа include(rc2/rc2.pri),..) и рассовываем все файлы (c , h , cpp ) в соответствующие каталоги crypto из каталогов openssl .
Начинаем компиляцию. Конечно начинаются ошибки...
Процесс устранения ошибок у нас происходил примерно в таком порядке (решили не исправлять):
INCLUDEPATH = $$PWD/../ххххххх - такие штуки вставляем иногда , где нужно в подпроекты (*.pri будем называть подпроектами).
Убираем
bf
- bfs.c main
- bfspeed.c maim
- bf_opts.c sys/time.h
- bss_rtcp.c #include <iodef.h>
cast
- casts.cpp
- castopts.c sys/time.h
- cast_spd.c sys/time.h
conf/test.c LHASH main
- cnf_save.c LHASH main
des
- des_opts.c # include OPENSSL_UNISTD
- speed.c # include <sys/times.h>
- read_pwd.c
- des.c
evp
- e_dsa.c
idea
- idea_spd.c sys/time.h
openssl
- dtls1.h winsock.h
- uplink.c #include "winsock.h"
lhash
- lh_test.c LHASH
#include(md2/md2.pri)
rc2
- rc2speed.c sys/time.h
rc4
- rc4speed.c
- rc4.c main
rc5 почему-то надо отключить
- rc5s.cpp #include <openssl/rc5.h>
x509v3
- v3conf.c main LHASH
sys/time.h это файлы как я понимаю для unix, у нас под Windows их просто нет (удалили из проекта).
Задолбала вечная проблема с #include <winsock2.h>.
#include <winsock2.h> должен добавляться до windows.h.
Решили так - просто добавили свой личный my1.h / my1.c , и указали компилировать его первым.
#ifndef MY1_H
#define MY1_H
#include <winsock2.h>
#ifdef _WINSOCK2API_
int foo();
#endif
#endif // MY1_H
Надо всегда winsock2.h в исходниках размещать на чамом верху файла в буквальном смысле.
*******************************
Компиляция завершена!
Линковка пошла!
********************************
main уже определен многократно в подкаталогах
удаляем файлы с main
bf
- bftest.c - main
cast
- casttest.c
des
- dess.cpp
- des3s.cpp
- rpw.c
- destest.c
aes
- aes_x86core.c
dh
- p1024.c
- dhtest.c
- p512.c
- p192.c main
dsa
- dsatest.c
- dsagen.c
ec
- ectest.c
ecdsa
- ecdsatest.c
engine
- enginetest.c
evp
- evp_test.c
- evp_extra_test.c
hmac
- hmactest.c
idea
- ideatest.c
md4
- md4s.cpp
- md4test.c
- md4.c
md5
- md5s.cpp
- md5test.c
- md5.c
mdc2
- mdc2test.c
pqueue
- pq_test.c
rand
- randtest.c
rc2
- rc2test.c
rc4
- rc4s.cpp
- rc4test.c
ripemd
- rmdtest.c
- rmd160.c
rsa
- rsa_test.c
sha
- shatest.c
- sha512t.c
- sha256t.c
- sha1test.c
- sha1.c
- sha.c
srp
- srptest.c
whrpool
- wp_test.c
x509
- verify_extra_test.c
x509v3
- v3_prn.c
- v3prin.c
- v3nametest.c
- tabtest.c
bn
- exp.c
- exptest.c
- expspeed.c
- bntest.c
- bnspeed.c
- divtest.c
bf
- bf_cbc.c
crypto
- sparcv9cap.c
- s390xcap.c
- ppccap.c
- o_dir_test.c main
- constant_time_test.c main
- armcap.c
ec
- ecp_nistz256.c
ecdh (забыли включить папку)
ecdhtest.c -
*********************************************
И сборка каталога crypto под Qt Creator 2.4.1
на Qt 4.8.1 завершена успешно
(на все дела 2 суток - перенос руками)
*********************************************
Надеюсь оно того стоило...
Что еще помогало : например можно посмотреть как на CMAKE делают сборку здесь :
https://github.com/janbar/openssl-cmake/blob/master/crypto/CMakeLists.txt
Можно смотреть оригинальные Makefile в каталогах openssl. Тоже очень помогает в вопросе какие файлы надо собирать, а какие удрать из сборки (под Windows).
Далее переходим к сборке второй библиотеки ssleay32.lib, но это уже на другой странице сайта .