मैं संकलन समय पर निष्पादन योग्य (लिंकर के लिए) के रनटाइम पथ के मैक ओएसएक्स के तहत सेट करना चाहता हूं, जैसे गैर-मानक स्थानों पर साझा लाइब्रेरी प्रोग्राम प्रारंभ में गतिशील लिंकर द्वारा पाई जाती हैं।मैक ओएसएक्स के तहत जीसीसी के साथ निष्पादन योग्य के रनटाइम पथ (-rpath) को कैसे सेट करें?
लिनक्स के तहत -Xlinker -rpath -Xlinker /path/to
(या -Wl,-rpath,/path/to
का उपयोग करके) के साथ संभव है और सोलारिस के तहत आप संकलक कमांड लाइन में -R/path/to
जोड़ सकते हैं।
मैंने पाया some information मैक ओएस एक्स जीसीसी 10.5 के बाद से -rpath समर्थन, है कि IE ~ 2008
के बाद से मैं इसे एक न्यूनतम उदाहरण के साथ काम करने के लिए कोशिश की - सफलता के बिना:
$ cat blah.c
int blah(int b)
{
return b+1;
}
और :
$ cat main.c
#include <stdio.h>
int blah(int);
int main()
{
printf("%d\n", blah(22));
return 0;
}
इसे इस तरह संकलित:
$ gcc -c blah.c
$ gcc -dynamiclib blah.o -o libblah.dylib
$ gcc main.c -lblah -L`pwd` -Xlinker -rpath -Xlinker `pwd`/t
अब टेस्ट:
$ mkdir t
$ mv libblah.dylib t
$ ./a.out
dyld: Library not loaded: libblah.dylib
Referenced from: /Users/max/test/./a.out
Reason: image not found
Trace/BPT trap
इस प्रकार प्रश्न: मैं मैक OSX के तहत लिंकर के लिए क्रम पथ सेट करने के लिए कैसे?
बीटीडब्ल्यू, DYLD_LIBRARY_PATH
सेटिंग सेट करना - लेकिन मैं इस हैक का उपयोग नहीं करना चाहता हूं।
संपादित करें:otool -L
के बारे में:
$ otool -L a.out
a.out:
libblah.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
ऐसा लगता है कि otool -L
केवल (लिंक समय में और संभावित स्थानों पर) पुस्तकालय के नाम प्रिंट निष्पादन और कोई क्रम पथ जानकारी के खिलाफ जोड़ा गया था।
मैं एक ओएस एक्स प्रणाली लेकिन चारों ओर खोज, [install_name_tool] (http://developer.apple.com/ की जरूरत नहीं है लाइब्रेरी/मैक/# प्रलेखन/डार्विन/संदर्भ/मैनपेज/मैन 1/install_name_tool.1.html) आपके बाइनरी में आरपीएथ जोड़ सकते हैं। सुनिश्चित नहीं है कि आपका काम क्यों नहीं कर रहा है - 'otool -L' क्या कहता है? – ephemient