makefile - संबंधित रिपाथ के साथ openssl संकलित कैसे करें




rpath (2)

अपने मेसेफाइल में प्रयास करें:

-Wl,-rpath,${ORIGIN}/../lib64

मैं मान रहा हूं कि मूल एक शेल चर है I

संपादित करें

मुझे आपके प्रश्न का उत्तर मिल गया है (बेहतर देर बाद कभी नहीं): आपको वेरिएबल के बीच में अंतर करने से रोकने की आवश्यकता है, ताकि आपको $$ (डबल डायलर साइन) का उपयोग करने की आवश्यकता हो।

-Wl,-rpath,'$$ORIGIN/../lib64'

मुझे पता है कि यह काम करता है क्योंकि मैंने इसे अपने खुद के आवेदन के साथ प्रयोग किया है, मजे :)

मैं निम्नलिखित rpath के साथ openssl 1.0.0g संकलन करने का प्रयास कर रहा हूं:

$ORIGIN/../lib64

हर बार मैं readelf -d apps/openssl , मुझे निम्न की तरह परिणाम मिल रहा है जो कि मैंने किस प्रकार की भिन्नता से बचने की कोशिश की है:

\RIGIN/../lib64
RIGIN/../lib64
ORIGIN/../lib64

मैं बाह्य उपकरणों का उपयोग किए बिना मेरी रैपथ सेट करना चाहता हूं जैसे क्रॉपरथ क्या यह संभव है? मैं मूल रूप से ऐसे कुछ भी स्वीकार करूँगा जो बाह्य उपकरणों जैसे क्रिप्ट (हालांकि मैं पहले से ही उसके साथ किया जाएगा) का उपयोग नहीं करता है।

आदर्श रूप में, मैं इसे कमांड लाइन (किसी भी रूप में -Wl,-rpath,$ORIGIN/../lib64 ) पर विकल्प पास करके यह करना -Wl,-rpath,$ORIGIN/../lib64

मुझे उत्पन्न मेकफाइल का संपादन करने में कोई दिक्कत नहीं है, जो कि मैं आखिरी बार कोशिश कर रहा हूं। अगर केवल मैं इसे बेवकूफ डॉलर के हस्ताक्षर प्रिंट करने के लिए मिल सकता है !!! मैंने बुल्दनेव = ब्लॉक के नीचे LIBRPATH संशोधित करने की कोशिश की, न कि भाग्य के साथ मेरा सबसे अच्छा परिणाम अब तक:

LIBRPATH=$$'ORIGIN/../lib64 # result: /../lib64
LIBRPATH=$$$$'ORIGIN/../lib64 # result: 12345<pid>/../lib64 

मैंने कई रापाथ से संबंधित प्रश्नों को पढ़ा है और विभिन्न भागने और युक्तियां उद्धृत करने की कोशिश की है, लेकिन कुछ भी अभी तक काम नहीं किया!


मैं chrpath रास्ता चला गया http://enchildfone.wordpress.com/2010/03/23/a-description-of-rpath-origin-ld_library_path-and-portable-linux-binaries/

यह Opensl में `$ $ ORIGIN` के शेल विस्तार का सामना करने के लिए काफी जटिल है। जल्द या बाद में, यह डॉलर के संकेत के कारण विस्तारित हो जाता है। अगर आप वास्तव में इस तरह से जाना चाहते हैं, तो आप ऐसा कर सकते हैं। लिनक्स पर openssl 1.0.1g के साथ काम करने के लिए मुझे निम्न मिल गया है। Makefile.shared में, इस रेखा के लिए देखें:

DO_GNU_APP=LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)"

इसे निम्नलिखित के साथ बदलें यह उद्धृत-फ्यू $ के विस्तार को बेअसर करता है। डबल $$ मेकफाइल में एकल डॉलर का चिह्न प्राप्त करने का तरीका है।

DO_GNU_APP=LDFLAGS="$(CFLAGS) -Wl,-rpath,'"'$$'"ORIGIN/../lib64'"

संकलन के बाद:

readelf -d apps/openssl | grep RPATH
 0x000000000000000f (RPATH)              Library rpath: ['$ORIGIN/../lib64']




rpath