На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Как собрать openssl под все платформы? , Проблемы при компиляции openssl под windows
    Мое почтение. Сам я не сишник ни разу и от линукса довольно далек. Так что если что, порошу потыкать носом даже в тривиальные вещи.

    Есть надобность иметь библиотеки libcrypto.a, libcurl.a и libssl.a, компилированнымм под все платформы. Т.е. arm64-v8a, armeabi, armeabi-v7a, mips, mips64, x86, x86_64.
    В налиичии есть armeabi, armeabi-v7a, mips и x86. По большому счету нужны еще шестидесятиразрядные версии. Причем нужные именно со статичской линковкой (как я понимаю), т.е. именно *.a.

    Гугл сказал, что это библиотеки по суте есть openssl. Найти готовые бинарники я не смог, и хотел скомпилировать себе свои собственные.

    Скачал архив openssl-1.1.1g.tar.gz. Ну и пытался следовать иснтрукциям. Поставил перл и насм без проблем.

    Конфигурирование и старт компиляции происходит нормально.

    1. perl Configure VC-WIN64A - сработало без проблем
    2. nmake - постоянно падает с ошибкой:

    Скрытый текст

    cl /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 /I "." /I "include" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSL_CPUID_OBJ" -D"OPENSSL_IA32_SSE2" -D"OPENSSL_BN_ASM_MONT" -D"OPENSSL_BN_ASM_MONT5" -D"OPENSSL_BN_ASM_GF2m" -D"SHA1_ASM" -D"SHA256_ASM" -D"SHA512_ASM" -D"KECCAK1600_ASM" -D"RC4_ASM" -D"MD5_ASM" -D"AES_ASM" -D"VPAES_ASM" -D"BSAES_ASM" -D"GHASH_ASM" -D"ECP_NISTZ256_ASM" -D"X25519_ASM" -D"POLY1305_ASM" -D"OPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -D"ENGINESDIR=\"C:\\openssltmp\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG" /Zs /showIncludes "ssl\t1_trce.c" 2>&1 > ssl\t1_trce.d
    cl /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 /I "." /I "include" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSL_CPUID_OBJ" -D"OPENSSL_IA32_SSE2" -D"OPENSSL_BN_ASM_MONT" -D"OPENSSL_BN_ASM_MONT5" -D"OPENSSL_BN_ASM_GF2m" -D"SHA1_ASM" -D"SHA256_ASM" -D"SHA512_ASM" -D"KECCAK1600_ASM" -D"RC4_ASM" -D"MD5_ASM" -D"AES_ASM" -D"VPAES_ASM" -D"BSAES_ASM" -D"GHASH_ASM" -D"ECP_NISTZ256_ASM" -D"X25519_ASM" -D"POLY1305_ASM" -D"OPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -D"ENGINESDIR=\"C:\\openssltmp\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG" -c /Fossl\tls13_enc.obj "ssl\tls13_enc.c"
    tls13_enc.c
    ssl\tls13_enc.c(69) : warning C4267: 'function' : conversion from 'size_t' to 'unsigned int', possible loss of data
    ssl\tls13_enc.c(91) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
    ssl\tls13_enc.c(92) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
    ssl\tls13_enc.c(218) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
    ssl\tls13_enc.c(219) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
    ssl\tls13_enc.c(395) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
    ssl\tls13_enc.c(397) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
    cl /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 /I "." /I "include" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSL_CPUID_OBJ" -D"OPENSSL_IA32_SSE2" -D"OPENSSL_BN_ASM_MONT" -D"OPENSSL_BN_ASM_MONT5" -D"OPENSSL_BN_ASM_GF2m" -D"SHA1_ASM" -D"SHA256_ASM" -D"SHA512_ASM" -D"KECCAK1600_ASM" -D"RC4_ASM" -D"MD5_ASM" -D"AES_ASM" -D"VPAES_ASM" -D"BSAES_ASM" -D"GHASH_ASM" -D"ECP_NISTZ256_ASM" -D"X25519_ASM" -D"POLY1305_ASM" -D"OPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -D"ENGINESDIR=\"C:\\openssltmp\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG" /Zs /showIncludes "ssl\tls13_enc.c" 2>&1 > ssl\tls13_enc.d
    cl /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 /I "." /I "include" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSL_CPUID_OBJ" -D"OPENSSL_IA32_SSE2" -D"OPENSSL_BN_ASM_MONT" -D"OPENSSL_BN_ASM_MONT5" -D"OPENSSL_BN_ASM_GF2m" -D"SHA1_ASM" -D"SHA256_ASM" -D"SHA512_ASM" -D"KECCAK1600_ASM" -D"RC4_ASM" -D"MD5_ASM" -D"AES_ASM" -D"VPAES_ASM" -D"BSAES_ASM" -D"GHASH_ASM" -D"ECP_NISTZ256_ASM" -D"X25519_ASM" -D"POLY1305_ASM" -D"OPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -D"ENGINESDIR=\"C:\\openssltmp\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG" -c /Fossl\tls_srp.obj "ssl\tls_srp.c"
    tls_srp.c
    cl /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 /I "." /I "include" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSL_CPUID_OBJ" -D"OPENSSL_IA32_SSE2" -D"OPENSSL_BN_ASM_MONT" -D"OPENSSL_BN_ASM_MONT5" -D"OPENSSL_BN_ASM_GF2m" -D"SHA1_ASM" -D"SHA256_ASM" -D"SHA512_ASM" -D"KECCAK1600_ASM" -D"RC4_ASM" -D"MD5_ASM" -D"AES_ASM" -D"VPAES_ASM" -D"BSAES_ASM" -D"GHASH_ASM" -D"ECP_NISTZ256_ASM" -D"X25519_ASM" -D"POLY1305_ASM" -D"OPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -D"ENGINESDIR=\"C:\\openssltmp\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG" /Zs /showIncludes "ssl\tls_srp.c" 2>&1 > ssl\tls_srp.d
    "C:\perl\strawberry\perl\bin\perl.exe" "util\mkdef.pl" ssl 32 > libssl.def
    IF EXIST .manifest DEL /F /Q .manifest
    IF EXIST libssl-1_1-x64.dll DEL /F /Q libssl-1_1-x64.dll
    link /nologo /debug /dll /nologo /debug /implib:libssl.lib /out:libssl-1_1-x64.dll /def:libssl.def @C:\Users\ANDREI~1\AppData\Local\Temp\nm330.tmp || (DEL /Q libssl-1_1-x64.* libssl.lib && EXIT 1)
    LINK : warning LNK4068: /MACHINE not specified; defaulting to X86
    ssl\bio_ssl.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
    Could Not Find c:\openssl\libssl-1_1-x64.*
    NMAKE : fatal error U1077: 'link' : return code '0x1'
    Stop.
    NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\nmake.exe"' : return code '0x2'
    Stop.


    Аналогичная ошибка происходит для x86 конфигурации.

    Может кто-нибудь научить как ето все заставить работать?

    ЗЫЖ Может у кого завалялись готовые бинарники? Был бы очень признателен.
      Если начать анализировать ошибки, то можно увидеть:
      Цитата

      "C:\perl\strawberry\perl\bin\perl.exe" "util\mkdef.pl" ssl 32 > libssl.def
      IF EXIST .manifest DEL /F /Q .manifest
      IF EXIST libssl-1_1-x64.dll DEL /F /Q libssl-1_1-x64.dll
      link /nologo /debug /dll /nologo /debug /implib:libssl.lib /out:libssl-1_1-x64.dll /def:libssl.def @C:\Users\ANDREI~1\AppData\Local\Temp\nm330.tmp || (DEL /Q libssl-1_1-x64.* libssl.lib && EXIT 1)
      LINK : warning LNK4068: /MACHINE not specified; defaulting to X86
      ssl\bio_ssl.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
      Could Not Find c:\openssl\libssl-1_1-x64.*
      NMAKE : fatal error U1077: 'link' : return code '0x1'
      Stop.

      Т.е. как я понял, перлу ты скормил X64 настройку и он тебе сгенерировал код для компиляции для платформы x64, а при компиляции ты ничего не стал указывать, и по умолчанию линковщик выбрал конфигурацию X86, а так как эти две конфигурации конфликтные для линковщика он выдал тебе вот такую ошибку.
      Я думаю тебе нужно перлу указать платформу и когда компилишь указать платформу.
      В ошибке даже сам линковщик подсказывает:

      Цитата
      warning LNK4068: /MACHINE not specified


      Думаю именно в этом проблема на данном этапе сборки. :-?

      Добавлено
      Во, очень интересная статья по данной ошибке: https://github.com/openssl/openssl/issues/5366, возможно поможет.

      Добавлено
      Вот еще по этой же проблематике: https://github.com/openssl/openssl/issues/4508

      Добавлено
      Ну и это еще можно почитать: https://stackoverflow.com/questions/3563756...get-machine-typ

      Добавлено
      Короче народ сходится во мнении что гдето в настройках тулчейнов трабла, либо ты 32 битным тулчейном пытаешься собрать 64 битную либу, либо настройки линкера перепутали.

      Я когда то собирал OpenSSL под UNIX особых проблем не испытывал. Под виндой хз, вроде брал уже собранные бинари. :-?
      Сообщение отредактировано: Wound -
        Если речь о Windows + Visual Studio,
        то я предлагаю рассмотреть еще альтернативный вариант в виде vcpkg.
        Вот отсюда краткое введение - как использовать.
        И в этом менеджере пакетов есть openssl достаточно свежей версии, сможете собрать.
          Цитата Wound @
          Т.е. как я понял, перлу ты скормил X64 настройку и он тебе сгенерировал код для компиляции для платформы x64, а при компиляции ты ничего не стал указывать, и по умолчанию линковщик выбрал конфигурацию X86, а так как эти две конфигурации конфликтные для линковщика он выдал тебе вот такую ошибку.

          Да, вроде конфигурация проходит нормально.

          Вообще, я, где-то из общих соображений так и думал. Проблема в том, что я не понимаю, что именно надо делать в таких случаях. Весь гугл облазил, но видимо просто не понимаю, куда смотреть.
          В инструкциях написано, что раньше надо было специальные батники запускать, типа do*, но теперь не надо и надо просто make выполнить.

          Цитата Wound @
          Думаю именно в этом проблема на данном этапе сборки.

          Я же запускаю коммандрную строку специально в режиме x64 tools, разве этого не достаточно?
          Если я конфигурирую версия для x86, то получаю ошибку о том, что нет библиотеки openssl по заданному пути. (к сожалению нет под рукой конкретного вывода).


          Цитата Wound @
          Короче народ сходится во мнении что гдето в настройках тулчейнов трабла, либо ты 32 битным тулчейном пытаешься собрать 64 битную либу, либо настройки линкера перепутали

          Вот я тоже пришел к такому же выводу, но как бы от этого не легче. Ссылки эти я видел. Проблема в том, что я не понимаю, как это применить в моей ситуации. А что касается последней, так мне вобще не очень понятно. У меня же нет проекта, и в студии я его не открываю. Не, я понимаю, что где-то глубоко в нутри это все та же настройка, но че делать не пойму :(


          Цитата Wound @
          Я когда то собирал OpenSSL под UNIX особых проблем не испытывал. Под виндой хз, вроде брал уже собранные бинари.

          У меня есть линукс mint, попробую на нем собрать сегодня. У меня толкьо вопрос, будут ли потом применимы эти либы (если вдруг сработает) под виндой и андроидом?
          Тут только проблема еще в том, что и с линуксом я тоже мало знаком.

          Цитата grgdvo @
          Если речь о Windows + Visual Studio,
          то я предлагаю рассмотреть еще альтернативный вариант в виде vcpkg.
          Вот отсюда краткое введение - как использовать.

          Ну желательно. Но есть линукс минт. И если есть конкретные работающие шаги/инструкция для нее, то было бы здорово. Особенно если после этого либы будут применимы под виндой и андроидом.
          По ссылки почитаю, я привильно поинмаю, что идея в том, что на вигду надо поставить аналаог линуксового менеджера пакетов, стянуть нужные пакеты и собрать их?


          И пару общих вопросов, просто что бы быть уверенным, что я правильно понимаю хоть что-то

          1. Есть проект ОпенССЛ, он написан на си, и что бы собирать его подразные платформы нужные разные конфигурационные файлы. Но проект идет с универсальными шаблонами этих файлов и перл нужен для того, что бы эти шаблоны превратить в реальные билд скрипты?
          2. Расширение *.а, это статически линкующаяся либа в мире юникса, микросфт такие либы делает с расширением *.lib. И в принципе достаточно просто переименовать 'lib' в 'a' и это будет то же самое?
            Цитата
            По ссылки почитаю, я привильно поинмаю, что идея в том, что на вигду надо поставить аналаог линуксового менеджера пакетов, стянуть нужные пакеты и собрать их?

            Да, vcpkg своего рода менеджер пакетов, которые собираются из открытых кодов под заданную арзитектуру.
            Если все правильно поставили, то в приниципе достаточно в шеле задать команду что-то типа

            ExpandedWrap disabled
              PS C:\Users\user\source\repos\vcpkg> .\vcpkg.exe install openssl:x64-windows
              Computing installation plan...
              The following packages will be built and installed:
                  openssl[core]:x64-windows
                * openssl-windows[core]:x64-windows
              Additional packages (*) will be modified to complete this operation.
              Starting package 1/2: openssl-windows:x64-windows
              Building package openssl-windows[core]:x64-windows...
              -- Downloading http://strawberryperl.com/download/5.30.0.1/strawberry-perl-5.30.0.1-32bit.zip...
              -- Downloading https://www.openssl.org/source/openssl-1.1.1d.tar.gz...
              -- Extracting source C:/Users/user/source/repos/vcpkg/downloads/openssl-1.1.1d.tar.gz
              -- Using source at C:/Users/user/source/repos/vcpkg/buildtrees/openssl-windows/src/openssl-1-b1f8ae3e6c
              -- Downloading http://www.nasm.us/pub/nasm/releasebuilds/2.14.02/win32/nasm-2.14.02-win32.zip...
              -- Downloading http://download.qt.io/official_releases/jom/jom_1_1_3.zip...
              -- Copying openssl release source files...
              -- Copying openssl release source files... done
              -- Configure x64-windows-rel
              -- Configure x64-windows-rel done
              -- Build x64-windows-rel
              -- Build x64-windows-rel done
              -- Copying openssl debug source files...
              -- Copying openssl debug source files... done
              -- Configure x64-windows-dbg
              -- Configure x64-windows-dbg done
              -- Build x64-windows-dbg
              -- Build x64-windows-dbg done
              -- Installing: C:/Users/user/source/repos/vcpkg/packages/openssl-windows_x64-windows/share/openssl-windows/copyright
              -- Performing post-build validation
              -- Performing post-build validation done
              Building package openssl-windows[core]:x64-windows... done
              Installing package openssl-windows[core]:x64-windows...
              Installing package openssl-windows[core]:x64-windows... done
              Elapsed time for package openssl-windows:x64-windows: 31.92 min
              Starting package 2/2: openssl:x64-windows
              Building package openssl[core]:x64-windows...
              -- Installing: C:/Users/user/source/repos/vcpkg/packages/openssl_x64-windows/share/openssl//usage
              -- Performing post-build validation
              -- Performing post-build validation done
              Building package openssl[core]:x64-windows... done
              Installing package openssl[core]:x64-windows...
              Installing package openssl[core]:x64-windows... done
              Elapsed time for package openssl:x64-windows: 560.1 ms
               
              Total elapsed time: 31.93 min
               
              ...skipped ...


            подождать какое-то время. менеджер сам подкачает и установит нужны зависимости и доп. пакеты.
            по результату вы полчите это

            ExpandedWrap disabled
              libcrypto-1_1-x64.dll
              libssl-1_1-x64.dll
              openssl.cnf
              openssl.exe
              libcrypto.lib
              libssl.lib


            уже разложенное по папочкам внутри vcpkg.
            останется только подключить к собственному проекту как обычно.
            если у вас cmake, то будет предложена интеграция с cmake на уровне find_package.


            про perl и остальное нутро openssl не скажу, давно ручками его не собирал.
            вероятно да, много наскриптовали, что поддерживать большое количество портов на разные платформы.
              В итогде кажется я просто не туда смотрел. То, что мне было надо, было написано в файле NOTICE.Android. И в принцие это сработоало, но только под линуксом. Не смотря на то, что они говорят, что по идее разницы быть не должно, под виндой на каждом шаге были какие то грабли. Я сдался на то, что нет gcc.

              Вобщем плюнул, и попробовал под линуксом. Сработало почти без проблем.

              Спасибо за советы и потраченное время.
                :good: За отметку "вопрос решен" :)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0312 ]   [ 16 queries used ]   [ Generated: 19.04.24, 06:35 GMT ]