2012-01-11 8 views
10

मैं ऐसा करने के लिए निहित नियमों का उपयोग करके, स्थिर पुस्तकालयों का एक समूह बनाने के लिए जीएनयू बनाने का उपयोग कर रहा हूं। ये नियम पुस्तकालय/संग्रह को अद्यतन करने के लिए ar (1) कमांड चलाते हैं। प्रोफाइलिंग ने दिखाया है कि निर्माण के दौरान समांतर नौकरियों को चलाने के लिए -जे विकल्प का उपयोग करने पर बिल्ड समय कम हो जाएगा।संग्रह फ़ाइलों के समानांतर निर्माण के लिए जीएनयू बनाने के दौरान मैं समवर्ती समस्याओं से कैसे बचूं?

दुर्भाग्य से, जीएनयू मैनुअल एक वर्ग http://www.gnu.org/software/make/manual/html_node/Archive-Pitfalls.html कि काफी का कहना है कि मेकअप ar (1), और इस प्रकार यह कर सकते हैं (और करता है) भ्रष्ट संग्रह चलाने के लिए कोई संगामिति गार्ड प्रदान करता है बनाते हैं। मैनुअल आगे teases कि यह भविष्य में तय किया जा सकता है।

इसका एक समाधान http://code.google.com/p/ipcmd का उपयोग करना है, जो मूल रूप से कमांड चलाने से पहले सैमफोर लॉकिंग करता है, इस प्रकार संग्रह को बनाने वाले ar (1) कमांड को क्रमबद्ध करता है। यह विशेष समाधान मेरे लिए अच्छा नहीं है क्योंकि मैं विंडोज पर मिंगव आधारित क्रॉस-संकलन उपकरण के साथ निर्माण कर रहा हूं।

क्या इस समस्या का कोई आसान या बेहतर समाधान है?

उत्तर

2

कम एक चरण संग्रह करते हैं, बल्कि संग्रह वृद्धिशील रूप से अपडेट करने के लिए कोशिश कर रहा से:

libfoo.a: $(OBJS) 
     -rm -f [email protected] 
     $(AR) rc [email protected] $^ 
     $(RANLIB) [email protected] 
+1

मुझे लगता है कि आपको संग्रह को चलाने की जरूरत है, ओबीजे नहीं। संभवतः आप नियमों में ऑब्जेक्ट फ़ाइलों के लिए $^का उपयोग भी कर सकते हैं। – user1143888

2

प्रयास करें निम्नलिखित -

AR := flock make.lock $(AR) 

clean:: 
    rm -f make.lock 

अब ar (1) एक विशेष लॉक के साथ निष्पादित करेंगे फाइल बनाने के लिए। इस प्रकार, पुस्तकालय तक पहुंच को क्रमबद्ध करना।

आप runlib कमांड के बाद फ़ाइल make.lock को हटाने के लिए एक कमांड जोड़ सकते हैं।

export AR जोड़ें यदि आवश्यक हो तो उप-निर्माण की परिभाषा को प्रसारित करने के लिए।

+0

क्या निर्माण के तहत संग्रह को 'झुंड' करने का अर्थ होगा? या 'flock' अन्य तरीकों से पहुंच प्रतिबंधित करता है? –

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