/ / OSAT पर RPATH को कैसे बदलें - macos, path, cmake, openkinect, rpath

ओएस एक्स - मैकोस, पथ, सेमेक, ओपनकिनेक्ट, आरपीएथ पर आरपीएटीएच को कैसे बदलें

मैं एक Xbox kinect का उपयोग करने के लिए ओपनकनेक्ट की वेबसाइट से एक साधारण इंस्टॉलेशन कर रहा हूं। समस्या यह है कि OSX वितरण नहीं है और यह माना जाता है कि homebrew आपके लिए इंस्टालेशन का ध्यान रखेगा।

स्थापना के अंतिम चरण पर मैं एक उपयोगी सुराग पर आया कि मेरी स्थापना में क्या गलत है।

मुझे साइट द्वारा बताया गया है। "अगर आपको लिंक करने में कोई समस्या है, तो आपको प्रत्येक लिबफ्रेंनेट लिब के rpath को बदलना होगा [निम्नलिखित कोड का उपयोग करके]"

for i in /opt/local/lib/libfreenect*.dylib; do sudo install_name_tool -id $i $i; done
sudo install_name_tool -change libfreenect.0.2.dylib /opt/local/lib/libfreenect.0.2.dylib /opt/local/lib/libfreenect_sync.dylib
sudo install_name_tool -change libfreenect.0.2.dylib /opt/local/lib/libfreenect.0.2.dylib /opt/local/lib/libfreenect_cv.dylib
sudo install_name_tool -change libfreenect_sync.0.2.dylib /opt/local/lib/libfreenect_sync.0.2.dylib /opt/local/lib/libfreenect_cv.dylib
for i in glview regview hiview glpclview tiltdemo record cppview cvdemo; do sudo install_name_tool -change libfreenect.0.2.dylib /opt/local/lib/libfreenect.0.2.dylib /opt/local/bin/$i; sudo install_name_tool -change libfreenect_sync.0.2.dylib /opt/local/lib/libfreenect_sync.0.2.dylib /opt/local/bin/$i; done

मेरा rpath निश्चित रूप से गलत तरीके से सेट किया गया है। और सीएमके के साथ निर्माण करते समय यह माध्यमिक संदेश निश्चित रूप से मेरे संदेह की पुष्टि करता है।

CMake Warning (dev):
Policy CMP0042 is not set: MACOSX_RPATH is enabled by default.  Run "cmake
--help-policy CMP0042" for policy details.  Use the cmake_policy command to
set the policy and suppress this warning.

MACOSX_RPATH is not specified for the following targets:

fakenect
freenect
freenect_sync

एकमात्र मुद्दा जो मेरे पास है वह यह है कि मेरे ऊपर दिए गए कमांड कार्य नहीं करते हैं। इसका कारण यह है कि मेरा मैक मेरी सभी फाइलों को नीचे रखता है /usr/local/lib/ और नहीं /opt/local/lib/। मैंने कुछ फाइलों की नकल की usr सेवा मेरे opt और इससे लिंकिंग त्रुटियों की संख्या कम हो गई, लेकिन मैं अभी भी कुछ के साथ छोड़ दिया हूं। फिर, उन सभी को पुस्तकालयों के साथ करना होगा opt जो इस समस्या को हल करना आसान बनाता है।

ऊपर दिए गए कोड के पहले ब्लॉक को ठीक से कैसे निष्पादित किया जाए, इसके लिए कोई मदद!

उप-नोट (समान समस्याएं):

उत्तर:

जवाब के लिए 2 № 1

यकीन नहीं होता कि यह वास्तव में आपके मामले के लिए मददगार है। लेकिन मैं अक्सर हल करने में सक्षम हूं rpathउचित के साथ संबंधित समस्याओं cmake तर्क:

INSTALL_DIR="/where/it/goes"
cmake .. 
-DCMAKE_BUILD_TYPE=Release 
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" 
-DCMAKE_MACOSX_RPATH=ON 
-DCMAKE_INSTALL_RPATH="$INSTALL_DIR/lib"

हर अब और फिर (अगर उदाहरण के लिए परियोजना हाथ में "टी लिंकर गुण ठीक से सेट नहीं है), मुझे अभी भी संलग्न होना है install_name_tool इंस्टालेशन के बाद। उदाहरण के लिए:

install_name_tool -change 
@rpath/QtWidgets.framework/Versions/5/QtWidgets 
/opt/dev/lib/qt/QtWidgets.framework/Versions/5/QtWidgets 
"$INSTALL_DIR/lib/libvtkRenderingQt-7.1.1.dylib"

यहाँ, libvtkRenderingQt-7.1.1.dylib एक पुस्तकालय है जो एक सीएमके परियोजना से बनाया गया था, जिसे ऊपर से एक ही सीएमके झंडे के साथ बनाया गया था। कुछ कारणों से, libvtkRenderingQt Qt फ्रेमवर्क से संसाधन नहीं मिल सके, जो उपरोक्त कमांड द्वारा तय किया गया था। छद्म वाक्य रचना में:

install_name_tool -change <old-path> <new-path> <file>

...कहा पे <old-path> एक दिखाया गया है otool -L <file>। ध्यान दें कि आप भी बदल सकते हैं rpath साथ में install_name_tool इसी तरह से (हेवन ने खुद को आजमाया नहीं):

install_name_tool -rpath <old-path> <new-path> <file>

और शायद एक आखिरी नोट: मैं उन उपकरणों को स्थापित करना पसंद करता हूं जो मैं खुद को स्थानीय निर्देशिका में बनाता हूं (उदा। /opt/dev, या कुछ उपयोगकर्ता निर्देशिका) को अन्य चैनलों (जैसे macport, brew, आदि) से अधिगृहीत किए गए अन्य इंस्टॉलेशन को गड़बड़ाने के लिए नहीं। यह आपको सूडो ऑप्स की आवश्यकता से भी रोकता है, जैसा कि आपके उदाहरण में।