कैसे शामिल करें और चक्र को कॉन्फ़िगर / बनाने के लिए काम के रास्ते शामिल हैं?


83

मुझे एक लाइब्रेरी बॉक्स में पुस्तकालयों को स्थापित करने के लिए एक जगह की आवश्यकता है, जिसमें मेरी कोई सु नहीं है। मैं ~ / स्थानीय [/ बिन, / परिवाद, / शामिल] का उपयोग कर रहा हूं, लेकिन मुझे नहीं पता कि मैं कैसे बता सकता हूं। / वहां पुस्तकालयों की तलाश करने के लिए कॉन्फ़िगर करें (विशेष रूप से, मैं emacs संकलन करने की कोशिश कर रहा हूं, जिसे libgif की आवश्यकता है , जो मेरे डिस्ट्रो में नहीं आता है)।

मैंने जोड़ने की कोशिश की

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

.bashrc पर यह काम नहीं करता है।


4
ध्यान दें कि PATH को छोड़कर, आप अपने सिस्टम को डिफ़ॉल्ट रूप से अधिलेखित कर देते हैं। यदि आप कुछ ऐसा बनाते हैं export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH, तो आपका कंपाइलर सबसे पहले ~/local/includeऔर $ C_INCLUDE_PATH में ही सर्च करेगा , अगर उसमें पहली डायरेक्टरी शामिल नहीं थी।
मार्क प्लानो-लेसे

जवाबों:


99

आप एक config.site फ़ाइल चाहते हैं। प्रयत्न:

$ mkdir -p ~ / स्थानीय / शेयर
$ बिल्ली << EOF> ~ / स्थानीय / शेयर / config.site
CPPFLAGS = -I $ HOME / लोकल / शामिल
LDFLAGS = -L $ HOME / स्थानीय / देय
...
EOF

जब भी आप एक ऑटोकॉन्फ़ जेनरेट की गई स्क्रिप्ट को --prefix = $ HOME / लोकल के साथ कॉन्फ़िगर करते हैं, config.site को पढ़ा जाएगा और आपके लिए सभी असाइनमेंट बना दिए जाएंगे। CPPFLAGS और LDFLAGS आप सभी की जरूरत होनी चाहिए, लेकिन आप किसी भी अन्य वांछित कार्य के रूप में अच्छी तरह से कर सकते हैं (इसलिए ... ऊपर के नमूने में)। ध्यान दें कि -I झंडे CPPFLAGS के हैं और CFLAGS में नहीं हैं, क्योंकि -I का इरादा प्री-प्रोसेसर के लिए है न कि कंपाइलर से।


विलियम; एक धन्यवाद, जो एक साझा मेजबान पर निर्माण के लिए CPPFLAGS के बारे में सलाह पर धमाका कर रहा था। आपके नोट के कारण, विफल हो गया है ।/configure आज चलता है।
ब्रायन टिफिन

30

जब आप रन बनाते हैं तो LDFLAGS और CFLAGS सेट करें:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

यदि आप ऐसा नहीं करना चाहते हैं तो एक गजिल बार, इन्हें अपने .bashrc (या अपने शेल समतुल्य) में निर्यात करें। इसके अलावा LD_LIBRARY_PATH को शामिल करें / घर / मुझे / स्थानीय / देय:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib

जब मैं LDFLAGS और CFLAGS को .bashrc
//

वे शायद कॉन्फ़िगर कोड कोड कंपाइलर मापदंडों को ओवरराइड कर रहे हैं। बस मेक एनव प्रीफेटिंग का उपयोग करें। यह भी देखें और देखें कि क्या कॉन्फ़िगर में पहले से ही कामेच्छा को ओवरराइड करने का विकल्प नहीं है। यदि ऑटोटूलस स्क्रिप्ट ठीक से बनाई गई हैं, तो यह आपको एक पथ को निर्दिष्ट करने के लिए बदल देगा जहां लिबगिफ स्थापित किया गया है (उदाहरण के लिए डिफ़ॉल्ट लाइब्रेरी को ओवरराइड करें)। यह क्लीनर समाधान होगा।
22404 पर long404

वही अंतर .. tneme @ ws16lab07: ~ / Descargas / emacs-23.3 $ LDFLAGS = "- L / home / tneme / local / lib" CFLAGS = "- l / home / tneme / local / शामिल" .configure --prefix = "/ घर / tneme / स्थानीय" चेकिंग सिस्टम प्रकार ... i686-pc-linux-gnu होस्ट सिस्टम प्रकार की जाँच कर रहा है ... i686-pc-linux-gnu gcc के लिए जाँच कर रहा है ... gcc जाँच कर रहा है कि C संकलित कार्य करता है या नहीं ... कोई विन्यास नहीं: त्रुटि: /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log में अधिक विवरण के लिए t
लैक्रोमोलॉजी

इन्हें तब परिभाषित किया जाना चाहिए जब आप "बनाते हैं", न कि जब आप "कॉन्फ़िगर" करते हैं।
long404

बस इन के साथ 23 emacs कॉन्फ़िगर करने की कोशिश की और मुझे वह समस्या नहीं मिली: LDFLAGS = "- L / home / me / local / lib" CFLAGS = "- I / home / me / local / शामिल" ./configure build build सिस्टम। प्रकार ... x86_64-linux-gnu चेकिंग होस्ट सिस्टम प्रकार ... x86_64-अज्ञात-linux-gnu gcc के लिए जाँच कर रहा है ... सी संकलक डिफ़ॉल्ट आउटपुट फ़ाइल नाम के लिए जाँच कर रहा है ... a.out जाँच कर रहा है कि क्या C कंपाइलर काम करता है ... हाँ जाँच रहा है कि क्या हम क्रॉस कम्पाइलिंग कर रहे हैं ...
एग्ज़िक्युटेबल्स के

8

इसे सही होने में थोड़ा समय लगा। मेरे पास यह मुद्दा था जब एक एआरएम लक्ष्य के लिए उबंटू में क्रॉस-संकलन। मैंने इसे हल किया:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf

सूचना CFLAGS का उपयोग autogen.sh/configure के साथ नहीं किया जाता है, इसका उपयोग करने से मुझे त्रुटि मिली: "कॉन्फ़िगर: त्रुटि: C कंपाइलर निष्पादक नहीं बना सकता"। बिल्ड वातावरण में मैं एक autogen.sh स्क्रिप्ट का उपयोग कर रहा था, यदि आपके पास autogen.sh स्क्रिप्ट स्थानापन्न नहीं है ।/autogen.sh साथ ./configure ऊपर की कमांड में। मैंने --host पैरामीटर प्राप्त करने के लिए लक्ष्य प्रणाली पर config.guess चलाया।

सफलतापूर्वक autogen.sh/configure चलाने के बाद, इसके साथ संकलित करें:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make

सीएफएलएजीएस जिसका मैंने उपयोग करने के लिए चुना था: "-march = armv5te -fno-tree-Vectorize -mthumb-interwork -mcpu = arm926ej-s"। इसमें शामिल सभी निर्देशिकाओं को सही ढंग से प्राप्त करने में थोड़ा समय लगेगा: आप चाहते हैं कि कुछ में आपके क्रॉस-कंपाइलर की ओर इशारा किया जाए और कुछ को आपके रूट फाइल सिस्टम में शामिल करना शामिल है, और संभवतः कुछ संघर्ष भी होंगे।

मुझे यकीन है कि यह सही जवाब नहीं है। और मैं अभी भी मेकफाइल्स में / / ccrootfs की ओर इशारा करते कुछ निर्देशिकाओं को देख रहा / रही हूं। इसे सही करने के लिए जानना पसंद करेंगे। आशा है कि यह किसी की मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.