Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.32.213] |
|
Сообщ.
#1
,
|
|
|
Мое почтение. Сам я не сишник ни разу и от линукса довольно далек. Так что если что, порошу потыкать носом даже в тривиальные вещи.
Есть надобность иметь библиотеки 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 конфигурации. Может кто-нибудь научить как ето все заставить работать? ЗЫЖ Может у кого завалялись готовые бинарники? Был бы очень признателен. |
Сообщ.
#2
,
|
|
|
Если начать анализировать ошибки, то можно увидеть:
Цитата "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 особых проблем не испытывал. Под виндой хз, вроде брал уже собранные бинари. |
Сообщ.
#3
,
|
|
|
Если речь о Windows + Visual Studio,
то я предлагаю рассмотреть еще альтернативный вариант в виде vcpkg. Вот отсюда краткое введение - как использовать. И в этом менеджере пакетов есть openssl достаточно свежей версии, сможете собрать. |
Сообщ.
#4
,
|
|
|
Цитата 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' и это будет то же самое? |
Сообщ.
#5
,
|
|
|
Цитата По ссылки почитаю, я привильно поинмаю, что идея в том, что на вигду надо поставить аналаог линуксового менеджера пакетов, стянуть нужные пакеты и собрать их? Да, vcpkg своего рода менеджер пакетов, которые собираются из открытых кодов под заданную арзитектуру. Если все правильно поставили, то в приниципе достаточно в шеле задать команду что-то типа 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 ... подождать какое-то время. менеджер сам подкачает и установит нужны зависимости и доп. пакеты. по результату вы полчите это 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 не скажу, давно ручками его не собирал. вероятно да, много наскриптовали, что поддерживать большое количество портов на разные платформы. |
Сообщ.
#6
,
|
|
|
В итогде кажется я просто не туда смотрел. То, что мне было надо, было написано в файле NOTICE.Android. И в принцие это сработоало, но только под линуксом. Не смотря на то, что они говорят, что по идее разницы быть не должно, под виндой на каждом шаге были какие то грабли. Я сдался на то, что нет gcc.
Вобщем плюнул, и попробовал под линуксом. Сработало почти без проблем. Спасибо за советы и потраченное время. |
Сообщ.
#7
,
|
|
|
За отметку "вопрос решен"
|