Мне потребовался целый день, чтобы понять, но я наконец смог скомпилировать curl с openssl v1.1.1b как статические библиотеки. Любой, кто приходит, может выполнить следующие шаги.
Part1 (настройка openssl v1.1.1b) :
1) Скачать пакет openssl v1.1.1b (не установщик)
2) Скачать и ввести Msys2
3) Открыть msys.exe
(не mingw32.exe или mingw.exe)
4) Запустите эту команду для установки perl и других пакетов (без кавычек):
"pacman -S make perl msys2-devel libcrypt-devel perl-CPAN mingw-w64-i686-toolchain"
5) Теперь закройте msys.exe и откройте mingw32.exe
6) Перейдите в каталог, куда вы распаковали пакет openssl (в моем случае это)
cd "C:\Users\John\Downloads\openssl-1.1.1b\openssl-1.1.1b"
Before continuing further you have to open the files below with any text editor like Notepad++
and add "#include <windows.h>" to each of them, without this you will run into errors:
"C:\Users\John\Downloads\openssl-1.1.1b\openssl-1.1.1b\crypto\dso\dso_win32.c"
"C:\Users\John\Downloads\openssl-1.1.1b\openssl-1.1.1b\crypto\init.c"
7) Выполнить (без кавычек) (это скомпилирует openssl как статическую библиотеку):
"./Configure --prefix=c:/OpenSSLx86 --openssldir=c:/OpenSSLx86 no-threads no-idea no-shared mingw"
8) Выполнить (без кавычек):
"make clean"
9) Выполнить (без кавычек): "make depend"
10) Выполнить (без кавычек):
"make"
11) Выполнить (без кавычек):
"make install"
Part2 (сборка здания с openssl v1.1.1b) :
1) Загрузите и извлеките пакет curl.
2) Перейдите в это место: "C:\Users\John\Downloads\curl\curl-7.65.0\lib\curl_setup.h"
и добавьте следующие строки, чтобы уменьшить размер скомпилированной библиотеки и выберите параметры, которые вы будете использовать. Я буду использовать только протокол SMTP, поэтому отключаю других.
#define CURL_DISABLE_TFTP
#define CURL_DISABLE_FTP
#define CURL_DISABLE_LDAP
#define CURL_DISABLE_TELNET
#define CURL_DISABLE_DICT
#define CURL_DISABLE_FILE
#define CURL_DISABLE_RTSP
#define CURL_DISABLE_POP3
#define CURL_DISABLE_IMAP
//#define CURL_DISABLE_SMTP
#define CURL_DISABLE_GOPHER
#define CURL_DISABLE_SMB
3) Перейдите к этим обоим файлам и измените переменную OPENSSL_PATH на "OPENSSL_PATH = C:\OpenSSLx86"
.
"C:\Users\John\Downloads\curl\curl-7.65.0\lib\Makefile.m32"
"C:\Users\John\Downloads\curl\curl-7.65.0\src\Makefile.m32"
4) Прогон: cd "C:\Users\John\Downloads\curl\curl-7.65.0"
5) Прогон: make mingw32-ssl
6) Теперь скопируйте libcurl.a
из C:\Users\John\Downloads\curl\curl-7.65.0\lib
в C:\curlx86
и все готово.
Here is my final CMakeLists.txt:
cmake_minimum_required(VERSION 3.3) #curl
project(ham)
set(CMAKE_CXX_STANDARD 14)
add_compile_definitions(
CURL_STATICLIB
WITH_SSL=STATIC
)
#CURL_DISABLE_SMTP
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32 -LC:/curlx86 -lcurl -LC:/OpenSSLx86/lib -lssl -LC:/OpenSSLx86/lib -lcrypto")
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -static-libgcc -static-libstdc++ -lwsock32 -lws2_32 -lwinmm -lcrypt32")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
project(untitled3)
add_executable(ham Ham/ham.cpp)
target_link_libraries(ham "C:/curlx86/libcurl.a" "C:/OpenSSLx86/lib/libssl.a" "C:/OpenSSLx86/lib/libcrypto.a")