如何在armv7架构中构建mcrypt库?

时间:2017-08-17 14:20:11

标签: c gcc aes mcrypt pjsip

我正在使用 PJSIP 开源库进行AES加密。用于 AES加密的库不是C编程中可用的内置库。所以,我已经使用外部库(Libmcrypt)进行AES加密。

我按照此站点将libmcrypt库构建到我的机器(MAC OSX)中。 https://coolestguidesontheplanet.com/install-mcrypt-php-mac-osx-10-10-yosemite-development-server/

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

在构建这些库时,它在 / usr / local / lib / 路径中创建了一个动态库(libmcrypt.dylib)。使用 lipo -info libmcrypt.dylib 命令检查该库的体系结构时,显示

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

但我正在使用PJSIP为 Android IOS 设备创建这些应用程序。他们的架构是 armeabi (android)和 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架构,如果没有,那么抱歉浪费你的时间。

提前致谢!

2 个答案:

答案 0 :(得分:8)

不要使用mcrypt。 MCrypt库尚未updated since 2007。您切换到OpenSSL或其他维护的加密项目highly recommended

PJSIP文档提供了有关如何在IOS和Android设备上使用OpenSSL的说明:

答案 1 :(得分:3)

我们可以使用以下openssl(Github)项目在所有体系结构上创建库,而不是使用 libmcrypt 库,如上面的答案所建议的那样。谢谢@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文件夹。检查是否为所有体系结构创建了四个库。

使用以下命令检查文件的支持的体系结构。转到cmd / terminal接口上的lib路径并检查,

lipo -info libcrypto.a

它将显示库文件支持哪些体系结构。

  

胖文件中的架构:libcrypto.a是:i386 armv7s armv7   x86_64 arm64