2009-06-16 8 views
24

हाय सब: त्वरित प्रश्न: मैं ऐसी परिस्थिति में हूं जहां यह केवल 'gcc' (g ++ के बिना) का उपयोग करके मेरे सी ++ निष्पादन योग्य उत्पन्न करने के लिए उपयोगी होगा। इसका कारण यह है कि मुझे कोड को स्वचालित सबमिशन सर्वर पर सबमिट करना होगा जो 'g ++' (या 'C++', उस मामले के लिए) कमांड को नहीं पहचानता है।'gcc' के साथ C++ कोड को लिंक करना (g ++ के बिना)

मेरे प्रयोगों में, जबकि मैं संकलित जीसीसी अच्छी तरह से काम करता है। समस्या यह है कि, जब मैं जेनरेट की गई ऑब्जेक्ट फ़ाइलों को लिंक करने का प्रयास करता हूं तो यह गड़बड़ हो जाता है। अब, मैं जीसीसी मैन पेज से जो समझता हूं उसके आधार पर (मैं रास्ता बंद कर सकता हूं, इसलिए मुझे बताएं कि मैं हूं), जी ++ मूल रूप से जीसीसी है, लेकिन यह सी ++ लाइब्रेरी को लिंक करता है।

यदि यह सच है, तो मैं (+ संभव हो सकता है) सी ++ लाइब्रेरी स्पष्ट रूप से g ++ (या C++) कमांड का उपयोग कर के बिना कैसे लिंक कर सकता हूं?

संपादित करें: मैं makefile जोड़ रहा बेहतर समस्या को वर्णन करने के:

COMPILER = gcc 
CFLAGS = -Wall -g -x c++ 

# MODULE COMPILATION 
model: modules/model.h modules/sources/model.cpp 
    $(COMPILER) $(CFLAGS) -c modules/sources/model.cpp -o obj/model.o 

algorithms: modules/algorithms.h modules/sources/algorithms.cpp 
    $(COMPILER) $(CFLAGS) -c modules/sources/algorithms.cpp -o obj/algorithms.o 

io: modules/io.h modules/sources/io.cpp 
    $(COMPILER) $(CFLAGS) -c modules/sources/io.cpp -o obj/io.o 

stopwatch: modules/stopwatch.h modules/sources/stopwatch.cpp 
    $(COMPILER) $(CFLAGS) -c modules/sources/stopwatch.cpp -o obj/stopwatch.o 

# EXECUTABLE GENERATION 
exe: model algorithms io stopwatch 
    $(COMPILER) $(CFLAGS) main.cpp obj/model.o obj/algorithms.o obj/io.o obj/stopwatch.o -o bin/process 

# DEFAULT TEST CASE 
run: exe 
    ./bin/process -i data/nasa_small.log -a data/nasa_small.access -s data/nasa_small.stack 

# CLEANING ROUTINE 
clean: 
    rm -f obj/* 
+0

जीसीसी और जी ++ सचमुच एक ही निष्पादन योग्य पर इंगित करता है। एकमात्र अंतर झंडे को पीछे के अंत में पास किया जाता है। –

+0

स्वचालित सबमिशन सर्वर को ठीक करें! –

+0

कोई विकल्प नहीं था = डी –

उत्तर

41

आप जीसीसी के लिए -l ध्वज के साथ मानक C++ पुस्तकालय लिंक कर सकते हैं:

gcc cplusplus.o -lstdc++ -o myexe 
+0

यह बहुत अच्छा काम करता है, मुझे इसे लिंक करने के लिए लाइब्रेरी का नाम नहीं पता था। –

+0

मैं इस तकनीक का सफलतापूर्वक वर्षों से उपयोग कर रहा हूं। लेकिन मैंने अभी उबंटू 11.10 (जीसीसी 4.6.1) में अपग्रेड किया है और यह काम करना बंद कर दिया है। अब मुझे कई मशीनों पर 'ऑपरेटर नई (हस्ताक्षरित लंबी)' त्रुटि के लिए अनिर्धारित संदर्भ मिल रहा है। क्या यह समस्या किसी और के लिए आ गई है? – mgiuca

+1

ओह, कभी भी बुरा मत मानो। ऐसा इसलिए है क्योंकि मैं ओ फ़ाइल से पहले -lstdC++ डाल रहा हूं। जीसीसी के नए संस्करणों की आवश्यकता होती है कि आप ओ फाइलों के बाद पुस्तकालय डालते हैं। – mgiuca

13

आप तो "-v" विकल्प के साथ g ++ चलाएं, यह दिखाएगा कि यह किस कमांड और विकल्पों का उपयोग करता है। आप वहां से सही जीसीसी कमांड लाइन को कम करने में सक्षम होना चाहिए।

+0

भी एक अच्छा समाधान! –

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