Подтвердить что ты не робот

Как создать библиотеку mcrypt в архитектуре armv7?

Я работаю над AES Encryption с помощью PJSIP библиотеки с открытым исходным кодом. Библиотека, которая используется для AES Encryption, не является встроенной библиотекой, доступной в C-программировании. Итак, я пошел с внешней библиотекой (Libmcrypt) для AES Encryption.

Я следил за этим сайтом для сборки библиотеки libmcrypt на моем компьютере (MAC OSX). https://coolestguidesontheplanet.com/install-mcrypt-php-mac-osx-10-10-yosemite-development-server/

https://gist.github.com/bricef/2436364

При создании этой библиотеки она создала одну динамическую библиотеку (libmcrypt.dylib) в пути /usr/local/lib/. при проверке архитектуры этой библиотеки с помощью команды lipo -info libmcrypt.dylib она показывает

Non-fat file: libmcrypt.dylib is architecture: x86_64

Но я создаю эти приложения для устройств Android и IOS, используя PJSIP. Их архитектуры armeabi (андроид) и armv7 (IOS).

При связывании libmcrypt.dylib(x86_64) в библиотеке PJSIP (armv7) отображаются следующие ошибки.

Undefined symbols for architecture armv7:
  "_mcrypt_enc_get_block_size", referenced from:
      _encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
      _decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
  "_mcrypt_generic", referenced from:
      _encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
  "_mcrypt_generic_deinit", referenced from:
      _encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
      _decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
  "_mcrypt_generic_init", referenced from:
      _encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
      _decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
  "_mcrypt_module_close", referenced from:
      _encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
      _decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
  "_mcrypt_module_open", referenced from:
      _encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
      _decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
  "_mdecrypt_generic", referenced from:
      _decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../bin/pjsip-test-armv7-apple-darwin_ios] Error 1
make[1]: *** [pjsip-test-armv7-apple-darwin_ios] Error 2
make: *** [all] Error 1

Я не знаю много об этих архитектурах. Возможно ли преобразовать libmcrypt.dylib(x86_64) в libmcrypt.dylib(armv7). Если да, то подскажите мне, как преобразовать его в архитектуру armv7, а если нет, то жаль тратить свое время.

Спасибо, Advance!

4b9b3361

Ответ 1

Не используйте mcrypt. Библиотека MCrypt не была обновлена ​​с 2007 года. настоятельно рекомендуется вы переключаетесь на OpenSSL или другой поддерживаемый проект шифрования.

В документации PJSIP есть инструкции по использованию OpenSSL для устройств IOS и Android:

Ответ 2

Вместо использования библиотеки libmcrypt мы можем использовать ниже проекты openssl (Github) для создания библиотек на всех архитектурах, как указано выше. Спасибо @Tim.

Используйте этот проект файл build -libssl.sh для компиляции для всех архитектур как на Android, так и на IOS.

Для Android,

https://github.com/ruslansalikhov/openssl-for-android

Для IOS,

https://github.com/x2on/OpenSSL-for-iPhone

Просто загрузите и скомпилируйте проект, используя файл build-libssl.sh. Он создаст всю библиотеку для вашей платформы. Либо в Android, либо в IOS.

Загрузите проект и перейдите в каталог проекта с помощью cmd/terminal.

cd OpenSSL-for-iPhone/

Скомпилируйте проект, используя следующую команду:

./build-libssl.sh

Примечание:  У машины должен быть установлен gcc-компилятор и SDK (Android ndk и IOS).

После успешной компиляции перейдите к папке PROJECT_DIR (OpenSSL-for-iPhone)/lib. Убедитесь, что для всех архитектур созданы четыре библиотеки.

Используйте следующую команду для проверки поддерживаемых архитектур в файле библиотеки. Перейдите в путь lib на интерфейсе cmd/terminal и проверьте,

lipo -info libcrypto.a

Он покажет, какие архитектуры поддерживаются файлом библиотеки.

Архитектуры в жирном файле: libcrypto.a: i386 armv7s armv7 x86_64 arm64