2011-01-13 3 views
6

मैं एक पार्सर पर काम कर रहा हूं जो जेसन स्ट्रिंग को पार करता है और मैं इसे पुस्तकालय बनाना चाहता हूं। समस्या जब मैं ld का उपयोग पुस्तकालय मैंने लिखा लिंक करने के लिए, वहाँ एक त्रुटि संदेश नहीं है कि है:मैं फ्लेक्स और बाइसन की 'मुख्य' दिनचर्या को कैसे खत्म कर सकता हूं ताकि मैं लेक्सिंग और पार्सिंग प्रक्रिया को लाइब्रेरी में रख सकूं?

main.o: In function `main': 
main.c:(.text+0x0): multiple definition of `main' 
json-parser.o:/build/buildd/flex-2.5.35/libmain.c:29: first defined here 

कैसे मैं इसे ठीक कर सकते हैं ..? धन्यवाद।

+0

CPPFLAGS = -Dmain = foo –

उत्तर

5

चूंकि न तो फ्लेक्स और न ही आपके लिए मुख्य कार्य बनाता है, यह लाइब्रेरी के रास्ते में आने वाले कोड में आपका main() होना चाहिए। असल में, लाइब्रेरी में main() डालें।

हालांकि, यह ध्यान रखें कि दोनों फ्लेक्स पुस्तकालय (-lfl, /usr/lib/libfl.*) और Yacc पुस्तकालय (-ly, /usr/lib/liby.*) वास्तव में एक अल्पविकसित main() कार्यक्रम होते हैं केवल मेला है। यदि आप या तो दोनों पुस्तकालयों का उपयोग करते हैं, तो आपको यह सुनिश्चित करना होगा कि main() के साथ आपकी अपनी ऑब्जेक्ट फ़ाइल लाइब्रेरी स्कैन होने से पहले जुड़ी हो।

+0

हाँ यह है '-lfl' बहुत बहुत शुक्रिया ~~~~ – mapcan

6

gcc -o charcount -lfl charcount.o के बजाय सहायता हो सकती है।

यह अजीब बात है कि ऑब्जेक्ट फ़ाइल और साझा लाइब्रेरी का क्रम यहां महत्वपूर्ण समझ में आता है, लेकिन रिवर्सन वास्तव में काम करता है।

+0

यह अजीब नहीं है, यह में विस्तार से बताया है [इस उत्तर] (https://stackoverflow.com/a/4682741/1983495)। –

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

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