2012-07-22 13 views
5

स्थापित किए बिना मैं कुछ सी ++ कोड पर कार्यान्वित कर रहा हूं जिसे मैं यथासंभव पोर्टेबल बनाना चाहता हूं। मैं पुस्तकालयों पर निर्भरताओं से बचने के लिए चाहता हूं जिन्हें स्थापित करने के लिए रूट पहुंच की आवश्यकता है। इसके अलावा, मैं अपने भंडार में बड़ी पुस्तकालयों की प्रतियों को रखने से बचाना पसंद करूंगा, और मैं पुस्तकालयों के उपयोगकर्ता-स्तरीय इंस्टॉलेशन नहीं करना चाहूंगा (बस क्योंकि मुझे उन्हें कई कंप्यूटरों पर मैन्युअल रूप से इंस्टॉल करना होगा।)व्यक्तिगत बूस्ट पुस्तकालयों के साथ संकलन, बूस्ट

मैं अपनी परियोजना में बूस्ट से normal_distribution कार्यक्षमता का उपयोग करना चाहता हूं। मैं समझता हूं कि बूस्ट को स्थापित करने के सामान्य तरीके के लिए sudo apt-get या sudo yum कमांड की आवश्यकता होती है, लेकिन मेरे पास सिस्टम पर रूट पहुंच नहीं है जहां यह कोड चल जाएगा। इस के आसपास जाने के लिए, मुझे आश्चर्य है कि क्या मैं बस अपनी कोड निर्देशिका में बूस्ट के normal_distribution.cpp और normal_distribution.hpp की प्रतिलिपि रख सकता हूं और इन फ़ाइलों के साथ अपने कोड को संकलित/लिंक कर सकता हूं। क्या यह काम करेगा?

पाठकों को आश्चर्य हो सकता है कि मैं TR1 या C++ 11 में normal_distribution कार्यान्वयन का उपयोग क्यों नहीं कर रहा हूं। जवाब यह है कि मुझे कुछ विश्वविद्यालय-प्रबंधित क्लस्टर के साथ संगतता बनाए रखने की आवश्यकता है जो अभी भी g ++ 4.1.x चलाते हैं, जो (कम से कम मेरे अनुभव में) <TR1/random> का समर्थन नहीं करता है।

+0

साइड नोट: जिस परियोजना पर मैं काम कर रहा हूं वह लाभ के लिए बिल्कुल नहीं है और बूस्ट के किसी भी लाइसेंस शर्तों का उल्लंघन नहीं करेगा। – solvingPuzzles

+2

बूस्ट किसी भी शीर्षलेख के लिए निर्भरताओं को निकालने के लिए उपयोगिता है। यह पूरी तरह से 100% नहीं है, लेकिन मैन्युअल काम बहुत कम हो गया है। इसकी जांच - पड़ताल करें। –

+0

धन्यवाद, अल्फ। मैंने निर्भरताओं को निकालने के लिए बीसीपी (http://www.boost.org/doc/libs/1_50_0/tools/bcp/doc/html/index.html) का उपयोग करने पर ध्यान दिया - मैं अभी भी इसका उपयोग कर सकता हूं। यकीन नहीं है कि सीखने की अवस्था बीसीपी के लिए क्या है, हालांकि, मैं देख सकता हूं कि बीसीपी की कोशिश करने से पहले कुछ आसान हो गया है या नहीं। – solvingPuzzles

उत्तर

3

मुझे कल्पना है कि BCP (Boost Copy) आपकी स्थिति के साथ ठीक से लिखा गया था।

+0

ठीक है, मैं बीसीपी स्थापित करने की कोशिश कर रहा हूं। मैक ओएस एक्स मशीन पर मैंने 'ब्रू इंस्टॉल बूस्ट' किया था। मैंने पढ़ा है कि बीसीपी बूस्ट इंस्टॉलेशन का हिस्सा है। तथापि। मुझे '-bash: bcp: कमांड नहीं मिला' जब मैं कमांड लाइन पर 'bcp' टाइप करता हूं। – solvingPuzzles

+0

मैंने 'बूस्ट इंस्टॉल बूस्ट-बिल्ड' भी किया, और मेरे पास अभी भी बीसीपी नहीं है। जब मैं बीसीपी पर जाता हूं, तो ज्यादातर जगहें कहती हैं कि बीसीपी बूस्ट वितरण का हिस्सा है। मदद! – solvingPuzzles

+1

मुझे बीसीपी स्थापित मिला। मुझे बूस्ट वेबसाइट से स्रोत कोड खींचना था और इसे बनाना/इंस्टॉल करना था। जैसा कि मैंने उम्मीद की थी उतना कठिन नहीं था। :) – solvingPuzzles

2

आपको ryppl प्रोजेक्ट को देखना चाहिए क्योंकि यह वही है जो इसे प्राप्त करने की उम्मीद कर रहा है। यदि आप जिथब के लिंक का पालन करते हैं तो आपको मॉड्यूलरिज्ड बूस्ट मिलेगा और वहां से आप जा सकते हैं और एक पूर्ण ryppl इंस्टॉल करने का प्रयास कर सकते हैं। किसी भी मामले में आधा रास्ता घर है और यह modularised boost है। इसे आसान बनाने के लिए एक मॉड्यूलरिज्ड बूस्ट/सेमेक भी है। यह दिशा है ryppl बढ़ावा लेने के लिए देख रहा है और यह बहुत उपयोगी होना चाहिए। शून्य इंस्टालर के लिए पाइथन स्क्रिप्ट का उपयोग करने की प्रवृत्ति केवल एकमात्र नकारात्मक पक्ष है।

जैसा कि कहा गया है कि बीसीपी इस उद्देश्य के लिए भी विकसित किया गया था, इसलिए एक विकल्प भी है। सावधान रहें, हालांकि बूस्ट एक svn-> गिट परिवर्तन के माध्यम से जा रहा है और ऐसा लगता है कि वर्तमान मॉड्यूलरिज्ड बूस्ट के साथ कुछ विसंगतियों में परिलक्षित कुछ संरचना को प्रभावित किया जा रहा है, मुझे यकीन नहीं है कि कैसे/अगर यह बीसीपी को प्रभावित करता है क्योंकि मुझे इसका कोई ज्ञान नहीं है प्रणाली।

+0

दिलचस्प। मैं वर्तमान मॉड्यूलरिज्ड बूस्ट/ryppl खींच सकता हूं और इसे स्थापित कर सकता हूं। :) – solvingPuzzles

0

मुझे बीसीपी को ठीक से काम करने में कुछ परेशानी थी। मैंने BCP-related question in this StackOverflow post दस्तावेज किया।

अल्प अवधि के लिए, मैंने अभी अपने कोडबेस में normal_distribution फ़ंक्शन जोड़ा है। मैंने इसे पिछले कुछ स्टैक ओवरफ्लो पोस्टों से एक साथ रखा है। यह कार्यान्वयन कोई फैंसी टेम्पलेट सामान नहीं करता है, लेकिन यह अन्यथा normal_distribution के बूस्ट, टीआर 1, और सी ++ 11 एपीआई के समान दिखता है। sampleNormal() समारोह के लिए this StackOverflow post (उपयोगकर्ता Pete855217) को

#include "math.h" 
double normal_distribution(double mean, double stdDev) 
{ 
    //scale the number to appropriate distribution 
    return mean + (sampleNormal()*stdDev); 
} 

//get a number from normal distribution (mean=0, stdDev=1). 
double sampleNormal() { 
    double u = ((double) rand()/(RAND_MAX)) * 2 - 1; 
    double v = ((double) rand()/(RAND_MAX)) * 2 - 1; 
    double r = u * u + v * v; 
    if (r == 0 || r > 1) return sampleNormal(); //recursively re-generate number if doesn't meet criteria 
    double c = sqrt(-2 * log(r)/r); 
    return u * c; 
} 

धन्यवाद, और समारोह है कि मैं normal_distribution() नाम दिया है के लिए this StackOverflow post (user5084) के लिए धन्यवाद।

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