मैं संपादन उत्पन्न Makefile, जो है मैं क्या पिछले कोशिश कर रहे हैं कोई आपत्ति नहीं है ...
मुझे यकीन नहीं है कि आप इसे खोल चर और सापेक्ष पथ से सेट कर सकते हैं। I ldd
$ORIGIN
$ORIGIN/../lib64
में $ORIGIN
फैलाता है। इस मामले में, मुझे लगता है कि आपको ldconfig
से लाइब्रेरी खोज पथ में$ORIGIN/../lib64
जोड़ने की आवश्यकता है। अधिक जानकारी के लिए सर्वर फॉल्ट पर finding ldd search path देखें।
चूंकि मुझे यकीन नहीं है, मैं वैसे भी निर्देश प्रदान करूंगा। आपको मेकफ़ाइल को बदलने की आवश्यकता नहीं है। वास्तव में, मेरे पास अतीत में ऐसा कोई भाग्य नहीं था क्योंकि चीजें ओवरराइट हो जाती हैं, और CFLAGS
और LDFLAGS
जैसी अन्य चीजों को अनदेखा कर दिया जाता है।
यह भी देखें Build OpenSSL with RPATH? आपका प्रश्न और उद्धृत प्रश्न अलग-अलग प्रश्न हैं जो समान उत्तरों (उनके बीच कोई डुप्लीकेट नहीं) पर अभिसरण करते हैं। लेकिन यह RPATHs पर ओपनएसएसएल देव की स्थिति प्रदान करता है। यह एक निजी ईमेल था, इसलिए मैंने पूरे संदेश की बजाय प्रासंगिक विवरण साझा किए।
यदि आप ईएलएफ अनुभाग में $ORIGIN/../lib64
एम्बेड करना प्रबंधित करते हैं और यह काम करता है, तो कृपया वापस रिपोर्ट करें। नीचे, मैं अपने RPATH के लिए /usr/local/ssl/lib
का उपयोग कर रहा हूं। /usr/local/ssl/lib
के लिए आपको $ORIGIN/../lib64
को प्रतिस्थापित करना चाहिए।
OpenSSL बीएसडी लक्ष्य (लेकिन अन्य) के लिए बॉक्स से बाहर RPATH
के समर्थन करता है। कॉन्फ़िगर से: होने के लिए
# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
# .so objects. Apparently application RPATH is not global and does
# not apply to .so linked with other .so. Problem manifests itself
# when libssl.so fails to load libcrypto.so. One can argue that we
# should engrave this into Makefile.shared rules or into BSD-* config
# lines above. Meanwhile let's try to be cautious and pass -rpath to
# linker only when --prefix is not /usr.
if ($target =~ /^BSD\-/)
{
$shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
}
OpenSSL 1.0.2 के लिए यह करने के लिए सबसे आसान तरीका है प्रकट होता हैadd it to linker flags during configuration
./config -Wl,-rpath=/usr/local/ssl/lib
तुम भी कॉन्फ़िगर लाइन और हार्ड कोड rpath
संपादित कर सकते हैं। उदाहरण के लिए, मैं डेबियन x86_64 पर काम कर रहा हूं। तो मैं एक संपादक में फ़ाइल Configure
, linux-x86_64
की नकल की है, यह linux-x86_64-rpath
नामित खोला, और -rpath
विकल्प जोड़ने के लिए निम्न परिवर्तन किया:
"linux-x86_64-rpath", "gcc:-m64 -DL_ENDIAN -O3 -Wall -Wl,-rpath=/usr/local/ssl/lib::
-D_REENTRANT::-Wl,-rpath=/usr/local/ssl/lib -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:
${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
ऊपर, खेतों 2 और 6 बदल रहे थे। वे ओपनएसएसएल के निर्माण प्रणाली में $cflag
और $ldflag
से मेल खाते हैं।
फिर, कॉन्फ़िगर नए विन्यास:
$ ./Configure linux-x86_64-rpath shared no-ssl2 no-ssl3 no-comp \
--openssldir=/usr/local/ssl enable-ec_nistp_64_gcc_128
अंत में, make
के बाद, सत्यापित करें सेटिंग्स अटक:
$ readelf -d ./libssl.so | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
$ readelf -d ./libcrypto.so | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
$ readelf -d ./apps/openssl | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
परिणाम की उम्मीद एक बार जब आप make install
करते हैं, तो ldd
का उत्पादन करेगा :
$ ldd /usr/local/ssl/lib/libssl.so
linux-vdso.so.1 => (0x00007ffceff6c000)
libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007ff5eff96000)
...
$ ldd /usr/local/ssl/bin/openssl
linux-vdso.so.1 => (0x00007ffc30d3a000)
libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f9e8372e000)
libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f9e832c0000)
...
यह नहीं है और यह पूरे मुद्दे का हिस्सा है। निष्पादन योग्य में लिखे जाने के लिए मुझे कूड़े की स्ट्रिंग '$ ORIGIN /../ lib64' की आवश्यकता है। किसी भी तरह का कोई प्रतिस्थापन नहीं होना चाहिए। –
क्या आप कृपया स्पष्ट कर सकते हैं कि आप किस ओपनस्ल का उपयोग कर रहे थे और मेकफ़ाइल की कौन सी रेखा बदल गई है? –
ओपनएसएसएल में 'Makefile.org' और रिकर्सिव मेकफ़ाइल का एक गुच्छा है। और वे 'CFLAGS', 'LDFLAGS', आदि का सम्मान नहीं करते हैं, इसलिए *" आपके मेकफ़ाइल प्रयास करें ... "* * जैसा * लगता है उतना आसान नहीं है। – jww