2012-09-25 28 views
7

में नहीं देखता है, मैं क्लैंग (3.0) के साथ सी ++, सेमेक-आधारित प्रोजेक्ट बनाने और लिंक करने का प्रयास कर रहा हूं। यह प्रोजेक्ट कई पुस्तकालयों से जुड़ा है जो एक कस्टम निर्देशिका/my/dir/में स्थापित हैं। यह निर्देशिका LD_LIBRARY_PATH और LIBRARY_PATH पर्यावरण चर में शामिल है। परियोजना जी ++ के साथ ठीक बनाता है और लिंक करता है।क्लैंग लिंकर LD_LIBRARY_PATH

लिंक उत्पन्न और cmake द्वारा निष्पादित आदेश के बाद दिखाई देता है:

/usr/bin/clang++ -O3 stuff.cpp.o -o stuff -rdynamic -lmylib 

ld तो निम्न संदेश के साथ शिकायत:

/usr/bin/ld: cannot find -lmylib 

लिंक आदेश ऊपर जब भी मैं मैन्युअल -L/my/dir/ जोड़ने ठीक चलाता है । -L ध्वज निर्दिष्ट किए बिना लिंक करने का कोई तरीका है?

+3

['LD_LIBRARY_PATH'] (http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html) स्टार्टअप पर लाइब्रेरी लोड करने के लिए है, लिंक निर्भरताओं को हल करने के लिए नहीं। शायद आप 'एलडीएफएलजीएस' का उपयोग करना चाहते हैं? –

+0

दिलचस्प। मैं __g ++ __ और __clang ++ __ का उपयोग सीएमके के साथ एक दूसरे के साथ कर सकता हूं लेकिन कभी भी ऐसी ही समस्या नहीं थी। लाइब्रेरी पथ को परिभाषित करने के लिए मैं बस 'link_directories() 'मैक्रो का उपयोग करता हूं। – Hindol

उत्तर

7

$LD_LIBRARY_PATH वातावरण चर (और अन्य यूनिक्स आधारित प्लेटफॉर्म पर अपनी विभिन्न विकल्प) क्रम, नहीं लिंक समय में प्रयोग किया जाता है, पुस्तकालयों खोजने के लिए।

-L का उपयोग सही दृष्टिकोण है और इससे बचा नहीं जा सकता है।

नोट: लिनक्स के तहत एक बेहतर दृष्टिकोण (आप अपने प्लेटफ़ॉर्म को निर्दिष्ट नहीं करते हैं इसलिए मैं अनुमान लगा रहा हूं) /etc/ld.so.conf.d/ में फ़ाइल को सही तरीके से कॉन्फ़िगर करना है और $LD_LIBRARY_PATH का उपयोग करने से बचें।

+1

ध्यान दें कि मैंने LIBRARY_PATH चर को भी परिभाषित किया है। जैसा कि इस प्रश्न में बताया गया है http://stackoverflow.com/questions/4250624/ld-library-path-vs-library-path यह चर है जो जीसीसी को कस्टम पुस्तकालयों को खोजने की अनुमति देता है। मैं झुकाव के लिए कुछ इसी तरह की तलाश में हूँ। –

+0

@ रेगीसबी। दिलचस्प; मैंने कभी भी 'LIBRARY_PATH' का उपयोग नहीं किया है। '-L' का उपयोग करने में क्या समस्या है? – trojanfoe

+1

-L विकल्प को cmake कॉन्फ़िगरेशन में बदलाव की आवश्यकता है, जो मेरे सहयोगियों के साथ साझा किया जाता है। अब मैं /etc/ld.so.conf.d/ रास्ते पर जाकर कोशिश करूंगा। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^