Как собрать OpenSSL под MinGW-w64 в Windows?

500
07 сентября 2017, 18:49

Пробовал несколько найденных в сети инструкций - результат всегда одинаковый:

/bin/sh: gcc: command not found
make[1]: *** [Makefile:591: crypto/aes/aes_cbc.o] Error 127
make[1]: Leaving directory '/d/Libraries/Sources/openssl-1.1.0f'
make: *** [Makefile:126: all] Ошибка 2

Директории "MSYS2" и "MinGW\mingw32\bin" прописаны в PATH, компилятор рабочий (кучу проектов и других библиотек собрал). Что не так ему с OpenSSL?

Нужны статические lib*.a библиотеки OpenSSL и их инклуды. Подскажите пожалуйста как собрать под Windows (mingw-w64) или, если кто знает где есть уже готовый вариант, поделитесь ссылкой пожалуйста.

Answer 1

Не прописывайте MSYS2 и путь к компилятору в PATH.

Используйте соответствующие оболочки, вызовите нужную через меню пуск: "MSYS2 MinGW 64-bit"

Оно настроит вам нужное окружение.

Более того, в самом окружении MSYS2 поставьте MinGW компилятор. В общем, для начала приложите вывод команды pacman -Q. Если же бегло, то в выводе должен присутствовать:

mingw-w64-x86_64-gcc

Если же его нет, то нужно:

pacman -S mingw-w64-x86_64-gcc

Но для начала стоит обновить всё окружение:

pacman -Syu

Возможно потребуются другие библиотеки для отстройки OpenSSL. Нужно так же ставить mingw-w64-x86_64-XXX версии.

К примеру, в самом MSYS2 есть три версии OpenSSL:

  • openssl - для Cygwin компилятора
  • mingw-w64-x86_64-openssl - для MinGW w64 64-bit
  • mingw-w64-i686-openssl - для MinGW w64 32-bit

Для других пакетов это тоже верно. Будьте внимательны и читайте доки, они рулез!

PS Кстати, возможно этих пакетов OpenSSL вам как раз и будет достаточно и не нужно будет собирать самому. Что тоже решение вопроса.

Answer 2

Простой способ - добавить каталог "MinGW/mingw64/bin", и удалить "MinGW\mingw32\bin" в переменную path - нельзя добавлять две версии одной программы в path. Предполагаю, у вас проблема именно из-за конфликта mingw32 и mingw64.

Другой вариант - нужно устанавливать переменные CXX и/или CC при запуске make (или перед запуском): make -j4 CXX=g++ CC=gcc. В этом случае не возникает конфликтов версий компиляторов.

READ ALSO
Перегрузка конструктора. Ошибка multiple definition of `Tile::Tile()' и других реализаций

Перегрузка конструктора. Ошибка multiple definition of `Tile::Tile()' и других реализаций

Что не так с реализацией, почему пишет "множественное определение" всех методов за классом? Пишу в QtCreator

250
std::forward в нешаблонной функции

std::forward в нешаблонной функции

Есть функция, принимающая rvalue ссылку и передающая её другой функции, принимающей rvalue ссылку:

257
Заполнение qtablewidget runtime

Заполнение qtablewidget runtime

Есть проект, в нем обрабатывает внешняя библиотека, у которой есть функции обратного вызоваКогда происходит событие функция обратного вызова...

370
Получение температуры процессора C++ WMI Qt

Получение температуры процессора C++ WMI Qt

На строке hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &returned); выкидывает ошибку IDispatch error #3587, почему это происходит и как это можно исправить?

510