Сборка статической версии библиотеки OpenSSL с использованием ключа / MD - PullRequest
0 голосов
/ 16 мая 2018

Сборка OpenSSL с использованием конфигурации по умолчанию дает вам динамическую версию библиотеки.В соответствии с документом по компиляции и установке OpenSSL на его Wiki существует параметр конфигурации с именем no-shared, который отключает общие объекты и создает только статическую библиотеку.

Компилятор Visual C ++ связывает двоичный файл (библиотека или приложение) либо в libcmt (d) .lib (статически связывает собственный запуск CRT с вашим кодом, используя / MT (d)), либо msvcrt (d) .lib (статическая библиотека для собственного запуска CRT для использования с DLL UCRT иvcruntime с использованием /MD(d)).

Связывание двоичных файлов, которые по-разному связаны с CRT, приводит к конфликтам.К сожалению, OpenSSL не дал нам возможность установить этот переключатель компилятора.Он всегда строит свою динамическую версию, используя / MD, и статическую версию, используя / MT.Так что же нам делать, когда мы хотим связать статическую версию с нашим приложением, когда у нас есть другие статические библиотеки, которые связаны с использованием / MD, такие как Qt?

1 Ответ

0 голосов
/ 16 мая 2018

В Интернете есть несколько готовых двоичных файлов, которые связывают этот путь, но всегда есть веская причина для создания OpenSSL самостоятельно. Наиболее важной причиной могут быть соображения безопасности или иногда вы обнаруживаете, что эти предварительно собранные двоичные файлы не компилируются с желаемой версией Visual C ++ или желаемыми конфигурациями. Я искал в Интернете, но не смог найти простой метод построения статической версии OpenSSL с использованием переключателя компилятора / MD без дополнительных сложных сценариев сборки. Некоторые из них работают только со старой версией библиотеки (то есть 1.0.x). Поэтому я решил поделиться своим путем.

ПРИМЕЧАНИЕ : в следующих шагах не помещайте ничего в каталог с пробелом в его имени.

Шаг 1. Скрипты сборки OpenSSL написаны с использованием Perl. Так что, если у вас нет Perl, сначала установите его. Я использовал портативную версию Strawberry Perl .

Шаг 2. Вам нужна 32- и / или 64-битная версия ассемблера nasm в зависимости от того, для каких платформ вы решили собрать OpenSSL. Вы можете скачать копию здесь . Добавьте нужную версию в системный путь.

Шаг 3. Загрузите последнюю стабильную версию исходного кода OpenSSL со своего веб-сайта и распакуйте ее. Хорошая идея - собрать OpenSSL из чистой загрузки. Поэтому сохраните его копию для последующих сборок (возможно, с другими конфигурациями).

Шаг 4. Откройте переносимую оболочку Strawberry Perl и перейдите в исходный каталог OpenSSL.

Шаг 5. Создание файлов OpenSSL make с помощью следующей команды:

perl Конфигурировать платформу [опции] [--debug] --prefix = absolute_path --openssldir = same_path

  • Платформа может быть VC-WIN32, VC-WIN64A и т. Д.

  • Некоторые интересные для меня варианты:

    • no-shared: отключение общих объектов (только статическая библиотека - cr https://stackoverflow.com/editing-helpeated)
    • no-stdio: не используйте ничего из файла заголовка C "stdio.h", который использует тип "FILE". Использование этой опции освобождает вас от привязки вашего окончательного двоичного файла к crypt32.lib.
    • no-sock: Не создавайте поддержку для сокетов BIO. Использование этой опции освобождает вас от привязки вашего окончательного двоичного файла к Ws2_32.lib.
  • Согласно документу по компиляции и установке OpenSSL, когда вы хотите что-то, что «просто работает» для всех последних версий OpenSSL, включая OpenSSL 1.0.2 и 1.1.0, укажите оба параметра --prefix и --openssldir и установите оба в одно и то же место.

Шаг 6. В исходном каталоге OpenSSL откройте make-файл и найдите LIB_CFLAGS. Измените / MT на / MD или / MDd в зависимости от того, компилируете ли вы выпускную версию или нет. Вы можете связать отладочную информацию (содержимое файла pdb) с вашей библиотекой. Для этого удалите / Fdossl_static и измените / Zl переключатель компилятора на /Z7.

Шаг 7. Запустите команду Visual Studio x86 / x64 Native Tools (в зависимости от того, для каких платформ вы решили создать OpenSSL) и перейдите в исходный каталог OpenSSL. Затем и, наконец, выполните следующие команды:

NMAKE

nmake install

Приятного времяпровождения. С особой благодарностью моему другу Афшину .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...