पर मल्टीआर्क ओपनएसएसएल बनाएं 32 मुझे 64 और 64 बिट आर्किटेक्चर के लिए ओएस एक्स पर ओपनएसएसएल बनाने की जरूरत है। मुझे ./Configure
को देने के लिए क्या विकल्प हैं ताकि मैं इसे दोनों आर्किटेक्चर के लिए उसी .a फ़ाइल में बनाया हो?ओएस एक्स
ओएस एक्स
उत्तर
./ कॉन्फ़िगर करें ताकि मैं इसे दोनों आर्किटेक्चर के लिए उसी .a फ़ाइल में बनाया हो?
आपको ओपनएसएसएल और बहुआयामी पुस्तकालयों से सावधान रहना होगा क्योंकि पुस्तकालय बहुआयामी सुरक्षित नहीं है। ऐसा इसलिए है क्योंकि प्रत्येक कॉन्फ़िगरेशन की अपनी <openssl/opensslconf.h>
फ़ाइल होती है, और प्रत्येक प्लेटफ़ॉर्म का BIGNUM
अलग होता है।
-arch x86_64 -arch i386
की आपूर्ति के परिणामस्वरूप ओपनएसएसएल के निर्माण प्रणाली के आदेशों के कारण बिल्ड विफलता होगी। Getting libcrypto ar error while compiling OpenSSL for Mac भी देखें।
नीचे दी गई एक ही प्रक्रिया आईओएस पर भी लागू होती है। परिवर्तन की एकमात्र चीज -arch
है। आईओएस के लिए, आप शायद armv7
, armv7s
, arm64
और i386
(32-बिट सिम्युलेटर डीबग के लिए) और x86_64
(64-बिट सिम्युलेटर डीबग के लिए) का उपयोग करेंगे।
एक और स्पष्ट-स्पष्ट चाल की आवश्यकता नहीं है। OpenSSL हार्ड कोड --prefix
और --openssldir
पर आधारित कुछ डिफ़ॉल्ट पथ हैं, इसलिए आपको स्थापना निर्देशिका के लिए 32-बिट बनाना, इंस्टॉल करना और फिर इसे स्थानांतरित करना है; फिर स्थापना निर्देशिका के लिए 64-बिट बनाएं, स्थापित करें, और फिर इसे स्थानांतरित करें; और उसके बाद स्थापित निर्देशिका में वसा पुस्तकालय बनाएँ। इसके अलावा How to determine the default location for openssl.cnf?
अंत में, की जगह नहीं करते ओएस एक्स के OpenSSL आपूर्ति को देखते हैं। OpenSSL 1.0.x और 1.1.x ओपनएसएसएल के ऐप्पल के 0.9.8 संस्करण के साथ बाइनरी संगत नहीं हैं। असंगतताओं के कारण, नीचे दी गई प्रक्रिया $HOME/ssl
का उपयोग करती है। आप /usr/local/ssl
या अपने स्वाद के अनुरूप किसी भी अन्य स्थान का उपयोग कर सकते हैं।
आरंभ करने से पहले जो OpenSSL विकी Compilation and Installation पर एक पृष्ठ है। config
पर आपूर्ति करने के लिए बहुत सारे विकल्प हैं। अपने स्वाद के अनुरूप जो चुनें। मैं हमेशा no-ssl2
का उपयोग करता हूं, और आमतौर पर no-ssl3
, no-comp
का उपयोग करता हूं। मोबाइल उपकरणों पर मैं no-srp
, no-psk
, no-hw
, no-dso
और no-engines
का उपयोग करता हूं।
लाइब्रेरी बनाने के लिए निर्देश यहां दिए गए हैं। आप अपने बहुआयामी निर्माण में समर्थन कर रहे प्रत्येक आर्किटेक्चर के लिए कॉन्फ़िगर, बिल्ड, इंस्टॉल और फिर स्थानांतरित करेंगे।
32-बिट
make clean && make dclean
KERNEL_BITS=32 ./config no-ssl2 no-ssl3 --prefix=$HOME/ssl
make depend
make
make install_sw
mv $HOME/ssl/include/openssl/opensslconf.h $HOME/ssl/include/openssl/opensslconf-x86.h
mv $HOME/ssl/include/openssl/bn.h $HOME/ssl/include/openssl/bn-x86.h
mv $HOME/ssl/ $HOME/ssl-x86
64-बिट
make clean && make dclean
KERNEL_BITS=64 ./config no-ssl2 no-ssl3 --prefix=$HOME/ssl
make depend
make
make install_sw
mv $HOME/ssl/include/openssl/opensslconf.h $HOME/ssl/include/openssl/opensslconf-x64.h
mv $HOME/ssl/include/openssl/bn.h $HOME/ssl/include/openssl/bn-x64.h
mv $HOME/ssl/ $HOME/ssl-x64
हेडर
आप हेडर के एक सेट की प्रतिलिपि बनाने के (यह कोई बात नहीं है) की जरूरत है , opensslconf-x86.h
कॉपी करें, opensslconf-x64.h
bn-x86.h
और bn-x64.h
, एक नया <openssl/opensslconf.h>
बनाएं, एक नया <openssl/bn.h>
बनाएं, और अंत में बहुआयामी पुस्तकालय बनाएं।
rm -rf $HOME/ssl
mkdir -p $HOME/ssl/bin
mkdir -p $HOME/ssl/include/openssl
mkdir -p $HOME/ssl/lib
cp $HOME/ssl-x86/openssl.cnf $HOME/ssl/openssl.cnf
cp $HOME/ssl-x86/include/openssl/* $HOME/ssl/include/openssl
cp $HOME/ssl-x86/include/openssl/opensslconf-x86.h $HOME/ssl/include/openssl/opensslconf-x86.h
cp $HOME/ssl-x64/include/openssl/opensslconf-x64.h $HOME/ssl/include/openssl/opensslconf-x64.h
cp $HOME/ssl-x86/include/openssl/bn-x86.h $HOME/ssl/include/openssl/bn-x86.h
cp $HOME/ssl-x64/include/openssl/bn-x64.h $HOME/ssl/include/openssl/bn-x64.h
न्यू <opensslconf.h>
आप ऐसा नहीं किया है, तो $HOME/ssl/include/openssl/opensslconf.h
पैदा करते हैं।
cat $HOME/ssl/include/openssl/opensslconf.h
#ifndef OPENSSL_MULTIARCH_CONF_HEADER
#define OPENSSL_MULTIARCH_CONF_HEADER
#if __i386 || __i386__
# include "opensslconf-x86.h"
#elif __x86_64 || __x86_64__ || __amd64 || __amd64__
# include "opensslconf-x64.h"
#else
# error Unknown architecture
#endif
#endif /* OPENSSL_MULTIARCH_CONF_HEADER */
न्यू <bn.h>
$HOME/ssl/include/openssl/bn.h
बनाएँ: आप एक नया हैडर गार्ड (OPENSSL_MULTIARCH_CONF_HEADER
) का उपयोग सुनिश्चित करें। आप एक नया हैडर गार्ड (OPENSSL_MULTIARCH_BN_HEADER
) का उपयोग सुनिश्चित करें: इस बिंदु पर
cat $HOME/ssl/include/openssl/bn.h
#ifndef OPENSSL_MULTIARCH_BN_HEADER
#define OPENSSL_MULTIARCH_BN_HEADER
#if __i386 || __i386__
# include "bn-x86.h"
#elif __x86_64 || __x86_64__ || __amd64 || __amd64__
# include "bn-x64.h"
#else
# error Unknown architecture
#endif
#endif /* OPENSSL_MULTIARCH_BN_HEADER */
पुस्तकालय
, आप $HOME/ssl-x86
में स्थित पुस्तकालय का एक 86 निर्माण और में स्थित पुस्तकालय का एक 64 का निर्माण किया है $HOME/ssl-x64
। आप lipo
$HOME/ssl
पर उन्हें गठबंधन करते हैं।
lipo -create $HOME/ssl-x86/lib/libcrypto.a \
$HOME/ssl-x64/lib/libcrypto.a \
-output $HOME/ssl/lib/libcrypto.a
lipo -create $HOME/ssl-x86/lib/libssl.a \
$HOME/ssl-x64/lib/libssl.a \
-output $HOME/ssl/lib/libssl.a
lipo -create $HOME/ssl-x86/bin/openssl \
$HOME/ssl-x64/bin/openssl \
-output $HOME/ssl/bin/openssl
शेयर पुस्तकालय
आप shared
के साथ विन्यस्त हैं, तो आप करने की आवश्यकता:
lipo -create $HOME/ssl-x86/lib/libcrypto.1.0.0.dylib \
$HOME/ssl-x64/lib/libcrypto.1.0.0.dylib \
-output $HOME/ssl/lib/libcrypto.1.0.0.dylib
lipo -create $HOME/ssl-x86/lib/libssl.1.0.0.dylib \
$HOME/ssl-x64/lib/libssl.1.0.0.dylib \
-output $HOME/ssl/lib/libssl.1.0.0.dylib
उसके बाद, आप softlinks से बनाना होगा:
ln -s $HOME/ssl/lib/libcrypto.dylib $HOME/ssl/lib/libcrypto.1.0.0.dylib
ln -s $HOME/ssl/lib/libssl.dylib $HOME/ssl/lib/libssl.1.0.0.dylib
अंत में, चीजों का परीक्षण करें। सत्यापित करें पुस्तकालयों multiarch हैं:
ls $HOME/ssl/lib/
libcrypto.a libssl.a
lipo -info $HOME/ssl/lib/libcrypto.a
Architectures in the fat file: $HOME/ssl/lib/libcrypto.a are: i386 x86_64
lipo -info $HOME/ssl/lib/libssl.a
Architectures in the fat file: $HOME/ssl/lib/libssl.a are: i386 x86_64
और फिर एक परीक्षण कार्यक्रम:
#include <openssl/opensslconf.h>
#include <openssl/ssl.h>
int main(int argc, char* argv[])
{
SSL_library_init();
return 0;
}
और:
$ clang -arch i386 -arch x86_64 -I $HOME/ssl/include test.c -o test.exe -L $HOME/ssl/lib -lssl -lcrypto
$ DYLD_LIBRARY_PATH=$HOME/ssl/lib; ./test.exe
$
DYLD_LIBRARY_PATH
मामले में आप ओएस एक्स पर गतिशील पुस्तकालयों का निर्माण किया जाता है
rm -rf $HOME/ssl-x86
rm -rf $HOME/ssl-x64
- 1. ओएस एक्स
- 2. ओएस एक्स
- 3. ओएस एक्स
- 4. ओएस एक्स
- 5. ओएस-एक्स
- 6. ओएस एक्स
- 7. ओएस एक्स
- 8. ओएस एक्स
- 9. ओएस एक्स
- 10. ओएस एक्स
- 11. ओएस एक्स
- 12. ओएस/एक्स
- 13. ओएस एक्स
- 14. ओएस एक्स
- 15. ओएस एक्स
- 16. ओएस एक्स
- 17. ओएस एक्स
- 18. ओएस-एक्स
- 19. ओएस एक्स
- 20. ओएस एक्स
- 21. ओएस एक्स
- 22. ओएस एक्स
- 23. ओएस एक्स
- 24. ओएस एक्स
- 25. ओएस एक्स
- 26. ओएस एक्स
- 27. ओएस एक्स
- 28. ओएस एक्स
- 29. ओएस एक्स
- 30. ओएस एक्स
बहुत बहुत शुक्रिया:
अगर वांछित, आप गैर multiarch प्रतिष्ठानों हटा सकते हैं। आपने धमाल मचाया! –