2016-01-07 8 views
12

में लिंकर त्रुटियों के विफल रहता है मैं एक खुला स्रोत ढांचे निरंतर एकीकरण के लिए CircleCI का उपयोग करता है बनाए रखें। मैंने हाल ही में एक दीवार मारा है जहां परियोजना ने अचानक अजीब परिस्थितियों में निर्माण करने से इनकार कर दिया।बिल्ड क्योंकि "कई परिभाषा" देशी निर्भरता

Build 27 पिछले एक है कि सफल रहा था। उसके बाद, मैंने निर्भरताओं में कुछ मामूली परिवर्तन किए और ध्यान दिया कि निर्माण विफल रहता है। मैंने सफलता के बिना इसे ठीक करने का प्रयास किया है, इसलिए मैं वापस काम कर रहे कॉन्फ़िगरेशन and it still failed पर वापस लौटा।

विफलता का कारण दो निर्भरताएं हैं, दोनों देशी सी पुस्तकालयों के लिए बाध्यकारी हैं: ओपनजीएल (OpenGLRaw) और जीएलएफडब्ल्यू (bindings-glfw)। वे लिंक चरण में कई पंक्तियों के साथ त्रुटि करते हैं:

/tmp/ghc18975_0/ghc18975_6.o:(.data+0x0): multiple definition of `__stginit_bindizu0Qm7f8FzzUN32WFlos7AKUm_BindingsziGLFW' 
/tmp/ghc18975_0/ghc18975_6.o:(.data+0x0): first defined here 

मैं पूरी तरह से स्टंप हो गया हूं कि ऐसा क्यों हो सकता है। उन पुस्तकालयों की ठीक उसी संस्करणों जब मूल निर्माण पारित कर वापस बनाया गया था, और सीआई पर होने से वह फिर से कंटेनर हर बार (मैं स्पष्ट रूप से कैश की सफाई की कोशिश की है) का उपयोग करता है। निर्माण दोनों apt-get update और cabal update शामिल है, हालांकि, तो संभावना है कि कुछ बाहरी संसाधन बदल रहा था।

क्या कभी किसी ने इस तरह के या इसी तरह की समस्या का सामना किया है, यह बेहद निदान और इस मुद्दे को दूर करने में मदद कर सकता है। इस विशिष्ट multiple definition उस पैमाने की समस्या के लिए Google खोज कुछ भी नहीं पैदा करती है।


मैं कबाल संस्करण को अद्यतन करने के लिए (के बाद से इंटरनेट पर कुछ संकेत यह की दिशा में रखे) कोशिश की, लेकिन साथ:

cabal-install version 1.22.6.0 
using version 1.22.4.0 of the Cabal library 

समस्या बनी रहती है।


एक महत्वपूर्ण बात जो मैं उल्लेख करना भूल गया था वह यह है कि यह कुछ सरल पैकेज मिश्रण की तरह सख्ती से नहीं दिखता है। मुझे लगता है कि बॉक्स के लिए SSH पर जुड़ा हुआ है, कोई खाली फोल्डर और एकसैंडबॉक्स वहाँ बनाया है, और यहां तक ​​कि साधारण cabal install OpenGLRaw एक ही समस्या के साथ विफल (इसलिए यह है कि जो अपने आप में एक ही मॉड्यूल के दो संस्करणों में खींच होता है कि उन लोगों के संघर्ष का कारण सकता है संभावना नहीं है)।


I've also extracted a verbose cabal installation log


क्या एसएसएच ने फिर से ओपनजीएलआरओ के कच्चे स्रोतों को क्लोन किया, वही। 7.6.3 की कोशिश की, अभी भी वही।

+1

मुझे एक समान समस्या है (CircleCI के साथ भी), लेकिन 'direct-sqlite-2.3.16' के साथ। – jpvillaisaza

+2

कोई भाग्य? ऐसा लगता है जैसे 'hslua' के लिए होता है। Https://github.com/commercialhaskell/stack/issues/1624 और https://github.com/osa1/hslua/issues/40 देखें। – jpvillaisaza

+1

@jpvillaisaza मैं जहां भी कर सकता हूं वहां बढ़ गया है; शायद हास्केल reddit को छोड़कर। यहां उछाल डालने का समय और सर्वश्रेष्ठ के लिए आशा है। –

उत्तर

13

यह gcc-4.9.2 के साथ एक समस्या हो रहा है। मैंने आपकी परियोजना को फोर्क किया, सर्कलसी कंटेनर से जुड़ा एक build with high verbosity level शुरू किया और सटीक लिंकिंग कमांड चलाया।

[email protected]:~$ /usr/bin/gcc -fno-stack-protector -DTABLES_NEXT_TO_CODE '-Wl,--hash-size=31' -Wl,--reduce-memory-overheads -Wl,--no-as-needed -nostdlib -Wl,-r -nodefaultlibs '-Wl,--build-id=none' -o Types.o /tmp/ghc17998_0/ghc_15.ldscript 
/tmp/ghc17998_0/ghc_14.o: In function `r2vy_closure': 
(.data+0x0): multiple definition of `__stginit_OpenGzu8rT20eO9AxEKIONeYf57cS_GraphicsziRenderingziOpenGLziRawziTypes' 
/tmp/ghc17998_0/ghc_14.o:(.data+0x0): first defined here 
/tmp/ghc17998_0/ghc_14.o: In function `r2vy_closure': 
(.data+0x8): multiple definition of `OpenGzu8rT20eO9AxEKIONeYf57cS_GraphicsziRenderingziOpenGLziRawziTypes_makeGLDEBUGPROC_closure' 
/tmp/ghc17998_0/ghc_14.o:(.data+0x8): first defined here 
/tmp/ghc17998_0/ghc_14.o: In function `c2y7_info': 
(.text+0xc0): multiple definition of `OpenGzu8rT20eO9AxEKIONeYf57cS_GraphicsziRenderingziOpenGLziRawziTypes_makeGLDEBUGPROC_info' 
/tmp/ghc17998_0/ghc_14.o:(.text+0xc0): first defined here 

लेकिन gcc-4.8 साथ यह काम करता है:

[email protected]:~$ /usr/bin/gcc-4.8 -fno-stack-protector -DTABLES_NEXT_TO_CODE '-Wl,--hash-size=31' -Wl,--reduce-memory-overheads -Wl,--no-as-needed -nostdlib -Wl,-r -nodefaultlibs '-Wl,--build-id=none' -o Types.o /tmp/ghc17998_0/ghc_15.ldscript 
[email protected]:~$ 

तो तुम बड़े gcc स्विच कर लेना चाहिए और शायद gcc devs के लिए किसी बग की रिपोर्ट यह उसी तरह विफल रहता है।

जोड़ा गया:Here उदाहरण है कि gcc संस्करण को कैसे स्विच करें।और here एक सफल निर्माण है।

+2

यह सिर्फ अद्भुत है। आपको बहुत - बहुत धन्यवाद! –

+0

यह मेरे लिए भी काम करता है। धन्यवाद! – jpvillaisaza

+2

इसके लिए आपको बहुत बहुत धन्यवाद। मैं कुछ दिनों के लिए HsOpenSSL बनाने की कोशिश कर इस समस्या के खिलाफ अपने सिर को टक्कर लगी हूं! – mightybyte

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