2014-06-29 15 views
11

मैं Caffe (http://caffe.berkeleyvision.org/installation.html) संकलित करने के लिए कोशिश कर रहा हूँ नहीं मिल रहा है और मैं निम्नलिखित त्रुटियाँ मिलती है:Ubuntu 12.04: ld पुस्तकालय

/usr/bin/ld: cannot find -lcblas 
/usr/bin/ld: cannot find -latlas 

हालांकि, मैं इन पुस्तकालयों स्थापित (libatlas) है। मेरा एलडी_LIBRARY_PATH पथ/usr/lib/atlas-base है और इसमें libcblas.so और libatlas.so फ़ाइलें हैं (और कुछ अन्य फ़ाइलें भी)।

एलडी इन पुस्तकालयों को क्यों नहीं ढूंढ पा रहे हैं? धन्यवाद।

उत्तर

10

tl; डॉ:Caffe makefile /usr/lib में libblas.so के लिए लग रहा है। यदि अनुपलब्ध है, तो update-alternatives उस स्थान पर स्थित एक प्रतीकात्मक लिंक /usr/lib/libblas.so बनाता है जहां यह स्थापित है। libcblas.so पर भी लागू होता है। LD_LIBRARY_PATH रनटाइम के लिए है, और इसके साथ कुछ भी करने की ज़रूरत नहीं है।


LD_LIBRARY_PATH संकलन करते समय वास्तव में आपकी सहायता नहीं करता है। के बाद पर संकलित प्रोग्रामों को निष्पादित करते समय साझा पुस्तकालयों को देखने के लिए यह केवल निर्देशिका प्रदान करता है। फिर भी, संकलन के दौरान लिंक करते समय, कंपाइलर को इन साझा पुस्तकालयों को ढूंढने की आवश्यकता होती है, और LD_LIBRARY_PATH से अन्य माध्यमों से ऐसा करता है। बात करने के लिए

अधिक: यदि gcc या clang, साथ संकलन निर्देशिका पुस्तकालयों -L ध्वज का उपयोग प्रदान की जाती हैं के साथ लिंक करने के लिए देखने के लिए, और यह LD_LIBRARY_PATH वातावरण चर पर विचार नहीं करता है, जिसमें।

libblas.so के लिए सामान्य स्थान /usr/lib/atlas-base/ और /usr/lib/libblas/ हैं। Makefilecaffe के लिए इन उपनिर्देशिकाओं को आजमाने और ढूंढने के लिए कुछ भी विशेष नहीं करता है, और डिफ़ॉल्ट पुस्तकालय निर्देशिका /usr/lib/ में इन पुस्तकालयों पर निर्भर करता है। आम तौर पर एक प्रतीकात्मक लिंक /usr/lib/libblas.so मौजूद है, और साझा लाइब्रेरी के वास्तविक स्थान को इंगित करता है। किसी कारण से, यह आपकी प्रारंभिक कॉन्फ़िगरेशन में मामला नहीं था।

पैकेज के लिए कई विकल्पों से निपटने पर, update-alternatives काम में आता है। libblas.so के मामले में यह आपको कई कार्यान्वयन (libblas, openblas) के बीच आसानी से स्विच करने देता है, आपने शायद स्थापित किया हो, और प्रतीकात्मक लिंक को बदलकर ऐसा कर सकता है।

sudo update-alternatives --config libblas.so यह प्रतीकात्मक लिंक बनाया गया था जब यह गायब था, जो बदले में संकलक को साझा लाइब्रेरी ढूंढने, आपकी समस्या को हल करने दें। यह आदेश के उत्पादन से निर्देशित होता है:

$ sudo update-alternatives --config libblas.so 
There is only one alternative in link group libblas.so (providing /usr/lib/libblas.so): /usr/lib/libblas/libblas.so 
Nothing to configure. 

तर्क की एक ही तरह libcblas.so पर लागू होता है।

5

यह पता चला मैं

sudo update-alternatives --config libblas.so 
sudo update-alternatives --config liblapack.so 

चलाने के लिए और libatlas का चयन करने के लिए किया था। मुझे नहीं पता कि क्यों। अगर कोई मुझे यह समझा सकता है तो मैं उसे जवाब दूंगा। धन्यवाद।

4

@ रण के जवाब में एक परिशिष्ट के रूप में, विशेष रूप से उबंटू में कैफ़े के साथ आवश्यकतानुसार एक अजीब पैकेज संरचना है।मैं इस पोस्ट को अपनी मशीन पर एक ही मुद्दे को ठीक करने में आया था, और अगर कुछ अटक गए हैं तो यहां कुछ मदद दी गई है। (उबंटू 14.04)।

libatlas-dev में निर्भरता के रूप में libatlas-base-dev नहीं है! कैफे बाद के बाद से पुस्तकालयों की तरह लगता है। इसे स्थापित करो।

फिर, @Ran द्वारा सुझाए गए आदेश चलाएं और/usr/lib के अंतर्गत एटलस-बेस निर्देशिका से पुस्तकालयों का चयन करें। केवल libatlas-dev स्थापित होने के साथ, अपडेट-विकल्प के पास @ swalog की पोस्ट के नीचे आउटपुट होगा, लेकिन वास्तव में एटलस लाइब्रेरी को लिंक नहीं करता है जिसे कैफे स्वीकृति देता है! इसे एटलस-बेस से एक होना चाहिए। उम्मीद है की यह मदद करेगा!

+0

यह काम करता है! धन्यवाद – mcExchange

4

sudo apt-get install libatlas-base-dev मेरे लिए काम किया, यह दोनों लापता निर्भरताओं को हटा दिया।

अतिरिक्त विवरण के लिए यह धागा देखें https://github.com/BVLC/caffe/issues/559

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