2011-04-14 14 views
5

मैं स्थिर पुस्तकालयों का उपयोग करने वाली परियोजनाओं से कुछ विरासत कोड बना रहा हूं। अब, मैं इस तरह त्रुटियों के बहुत सारे मिल:बल डुप्लिकेट प्रतीकों को अनदेखा करता है?

ld: warning: option -m is obsolete and being ignored 
ld: duplicate symbol <function name> 

वहाँ निर्माण के माध्यम से मजबूर करने के लिए एक रास्ता है। जो मैं देख सकता हूं उससे "डुप्लिकेट" फ़ंक्शन समान हैं, यह केवल बिल्ड प्रक्रिया है जो खराब हो गई है। परियोजना वास्तव में बड़ी है (और विरासत सी और सी ++ कोड की गड़बड़ी) और मैं वास्तव में निर्माण प्रक्रिया की जांच करने के घंटों से बचना चाहता हूं। क्या कोई "त्वरित सुधार" है? मुझे वास्तव में केवल एक बार इस कार्यक्रम को चलाने की जरूरत है, इसलिए मैं (कुछ) स्थिरता मुद्दों के साथ रह सकता हूं।

उत्तर

2

("नकल" के लिए) man ld में खोज करने पर, अपने सिस्टम पर, इस लाया:

--traditional-format 
     For some targets, the output of ld is different in some ways from 
     the output of some existing linker. This switch requests ld to use 
     the traditional format instead. 

     For example, on SunOS, ld combines duplicate entries in the symbol 
     string table. This can reduce the size of an output file with full 
     debugging information by over 30 percent. Unfortunately, the SunOS 
     "dbx" program can not read the resulting program ("gdb" has no 
     trouble). The --traditional-format switch tells ld to not combine 
     duplicate entries. 

यह कोशिश करो। शायद यह आपकी समस्या हल करता है।

+0

किस प्लेटफ़ॉर्म के लिए है? यह विकल्प मैक ओएस एक्स पर उपलब्ध नहीं है। हालांकि, मैंने उबंटू मशीन पर सफलता के बिना इसे आजमाया। मैन पेज से यह डीबग प्रतीकों के साथ ऐसा करना पसंद करता है। – Krumelur

+0

यह मेरी डेबियन मशीन (एलडी वी 2.21.0.20110327) पर 'मैन एलडी' का आउटपुट है)। मैंने इसका परीक्षण नहीं किया। क्षमा करें यह आपके लिए काम नहीं करता है। – pmg

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