2017-08-17 79 views
13

我正在与AES加密工作PJSIP开源库。用于AES Encryption的库不是C编程中的内置库。所以,我已经用外部库(Libmcrypt)进行AES加密。如何在armv7架构中构建mcrypt库?

我跟着这个网站建立libmcrypt库到我的机器(MAC OSX)。 https://coolestguidesontheplanet.com/install-mcrypt-php-mac-osx-10-10-yosemite-development-server/

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

在构建它在的/ usr /本地/ LIB/路径中创建一个动态库(libmcrypt.dylib)那些库。检查使用该库的架构时,脂-info libmcrypt.dylib命令,它显示

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

但我为的Android和使用PJSIP 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架构,如果不是,那么很抱歉浪费你的时间。

在此先感谢!

+3

不,你不能(容易)从x86_64的转换为ARMv7的。你需要从源代码交叉编译它。 –

+0

@lan如果您不介意,请参阅我如何将x86_64交叉编译为armv7体系结构。 – NandhaKumar

+3

您不交叉编译x86_64二进制文件,您可以交叉编译源代码。您为Android/iOS安装的开发套件应包含一个交叉编译器,该编译器可在您的MAC OSX主机上运行,​​并为Android/iOS生成armv7二进制文件。您需要在适当的开发环境中构建mcrypt。 –

回答

8

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

的PJSIP文件对如何使用OpenSSL两个IOS和Android设备的说明:

+1

你非常...!我跟着这个链接https://github.com/x2on/OpenSSL-for-iPhone。只需使用build-lib使用openssl下载和编译iPhone GitHub项目。它在所有体系结构中都提供了库libcrypto.a和libssl.a(i386 armv7s armv7 x86_64 arm64)。 – NandhaKumar

3

而不是使用libmcrypt库,我们可以在下面用openssl(Github)用于在所有体系结构上创建库的项目,正如上面的答案所建议的。谢谢@蒂姆。

使用该项目build-libssl.sh该文件用于编译Android和IOS上的所有体系结构。

对于的Android

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

对于IOS

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

只需下载并使用build-libssl.sh文件编译项目。它将为您的平台创建所有库。或者在AndroidIOS

下载项目并使用cmd/terminal转到项目目录。

cd OpenSSL-for-iPhone/ 

使用以下命令编译项目,

./build-libssl.sh 

注: 机器必须有gcc编译器和安装SDK(NDK的Android和IOS)。

成功编译后,转到PROJECT_DIR(OpenSSL-for-iPhone)/ lib文件夹。检查为所有体系结构创建了四个库。

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

lipo -info libcrypto.a 

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

架构FAT文件:libcrypto.a是:I386 armv7s的ARMv7 x86_64的arm64