2011-12-29 9 views
7

मैं हाइब्रिड ट्री (महत्वपूर्ण नहीं) के कार्यान्वयन की तलाश में हूं, और एक "पुराना" एक here ढूंढ रहा हूं।पुराने कंपाइलर के लिए लिखे गए प्रोग्राम को कैसे चलाया जाए?

लेखक ने कहा कि वे सूर्य SPARC मंच और जीसीसी-2.8.1 संकलक के साथ (सोलारिस 2.6 चल) पर इस कोड की कोशिश की है। और मेरा पर्यावरण जीसीसी संस्करण 4.4.3 (उबंटू 10.10) है।

समस्या है: मैं चलाने makefile वह प्रदान करता है के साथ "बनाना" है, लेकिन यह मुझे त्रुटि संदेश के बहुत सारे देता है इस प्रकार है:

g++ -c Node.C 
g++ -c DataNode.C 
In file included from DataNode.h:18, 
       from DataNode.C:17: 
Query.h:9:20: error: vector.h: No such file or directory 
Query.h:10:19: error: stack.h: No such file or directory 
Query.h:13:22: error: function.h: No such file or directory 
Query.h:14:22: error: iostream.h: No such file or directory 
DataNode.C:283:8: warning: extra tokens at end of #endif directive 
In file included from DataNode.h:18, 
       from DataNode.C:17: 
Query.h:29: warning: ‘typedef’ was ignored in this declaration 
Query.h:44: warning: ‘typedef’ was ignored in this declaration 
Query.h:86: error: expected initializer before ‘<’ token 
Query.h:118: error: ISO C++ forbids declaration of ‘PQ’ with no type 
Query.h:118: error: expected ‘;’ before ‘*’ token 
Query.h:122: error: ISO C++ forbids declaration of ‘PQ’ with no type 
Query.h:122: error: expected ‘;’ before ‘*’ token 
Query.h:126: error: ISO C++ forbids declaration of ‘PQ’ with no type 
Query.h:126: error: expected ‘;’ before ‘*’ token 
Query.h:135: error: expected initializer before ‘<’ token 
DataNode.C: In member function ‘void DataNode::DisconnectBranch(int)’: 
DataNode.C:80: error: ‘memmove’ was not declared in this scope 
make: *** [DataNode.o] Error 1 

मैं जानता हूँ कि मैं souce कोड संशोधित करना होगा करने के लिए के रूप में तो मॉर्डन कंपाइलर से सहमत हैं, जैसे vector.h से vector बदलें। लेकिन मुझे लगता है कि यह सिर्फ अंतहीन है।

तो मेरा सवाल यह है कि: इस प्रोग्राम को चलाने के लिए कोई दृढ़ तरीका है, चाहे इस कोड को "आधुनिक शैली" में परिवर्तित कर दिया जाए या स्टैंडअलोन "पुरानी शैली" कंपाइलर का उपयोग न करें?

कोई सुझाव?

=== अद्यतन: ===

आप सभी को धन्यवाद, मैं --prefix=/usr/local/gcc-2.8.1 का उपयोग कर और "makefile" संशोधित इस पुराने संस्करण जीसीसी (/usr/local/gcc-2.8.1/bin/gcc) का उपयोग करने के लिए एक अलग निर्देशिका में gcc2.8.1 स्थापित। लेकिन जब मैं "बनाना" चलाने के लिए, यह अभी भी मुझे हेडर नहीं मिल की त्रुटियों देता है:

/usr/local/gcc-2.8.1/bin/gcc -c DataNode.C 
In file included from DataNode.h:18, 
       from DataNode.C:17: 
Query.h:9: vector.h: No such file or directory 
Query.h:10: stack.h: No such file or directory 
Query.h:11: deque: No such file or directory 
Query.h:12: algorithm: No such file or directory 
Query.h:13: function.h: No such file or directory 
Query.h:14: iostream.h: No such file or directory 
make: *** [DataNode.o] Error 1 

तब मैं find /usr/local/gcc-2.8.1 -name "*vector*" का उपयोग कर /usr/local/gcc-2.8.1 में इन प्रमुखों को खोजने के लिए कोशिश की, लेकिन कुछ भी नहीं मिला ।

तो पुराने संस्करण जीसीसी के लिए ये सिर कहां हैं?

उत्तर

-2

प्रारंभ करने के लिए, त्रुटि संदेश में उल्लिखित सिस्टम शीर्षलेख फ़ाइलों से ".h" को निकालने का प्रयास करें। यह आपको अन्य त्रुटियों को देगा, लेकिन बस उन्हें एक-एक करके आज़माएं और ठीक करें।

+1

उन्होंने विशेष रूप से शीर्षकों का नाम बदलने के अलावा अन्य समाधान के लिए कहा। –

+1

प्लस, हेडर का नाम बदलना इसके अंत के करीब भी नहीं है। यदि आप उस मार्ग पर जाते हैं, तो आपको नामस्थानों के बारे में चिंता करने की भी आवश्यकता है - '' सबकुछ 'std' में रखता है, उदाहरण के लिए, जबकि' 'नहीं है। – cHao

7

आप वेक्टर बना सकते हैं जिसमें वेक्टर शामिल हैं। इस तरह आप असंगतताओं को असंगत रूप से ठीक कर सकते हैं।

संपादित करें:

तुम भी हेडर फाइल (ओं) में एक using namespace std; जोड़ने की जरूरत हो सकती है। यह आमतौर पर एक बुरा विचार है, लेकिन यह एक ऐसी स्थिति है जहां मैं इसे वैसे भी करूँगा।

एक बार जब आप इसे काम कर लेते हैं तो मैं इसे नई स्टाइल हेडर फ़ाइलों और नामस्थानों का उपयोग करने के लिए पुनः लिखना होगा।

+0

नामस्थान आयात करना एक कंपाइलर चीज है, इसलिए इसके सामने कोई '#' नहीं है! – ThiefMaster

+0

धन्यवाद। ठीक कर देंगे। मैंने कहा कि मेरा सी ++ जंगली था। –

3

डेबियन लेनी (पुरानी) में जीसीसी 3.4 है। यह एक बेहतर पिछड़ा संगतता हो सकती है। शेष मुद्दों के लिए संगतता शीर्षलेख बनाने का प्रयास करें और उन्हें अतिरिक्त -I निर्देशिका के माध्यम से शामिल करें, उदा। vector.h हेडर फ़ाइल जिसमें vector शामिल है।

अपने आप को पक्ष करें और पुराने कोड को छूने का प्रयास न करें। अप्रत्याशित तरीकों से विरासत कोड तोड़ना आसान है।

0

आप QEMU पर प्रोग्राम चलाने का प्रयास कर सकते हैं जो supports Solaris 2.6 है। डिस्क/छवि स्थापित करने के लिए एकमात्र समस्या शिकार हो सकती है। इसके अलावा, ऐसे लोग हैं जो सस्ते पर ईबे पर पुराने सोलारिस बक्से बेचते हैं, तो आप एक को पकड़ने में सक्षम हो सकते हैं।

GCC बहुत पुराने संस्करणों के लिए डाउनलोड प्रदान करता है, तो आप संकलक के पुराने संस्करण को आजमाने का बेहतर मौका पाने में सक्षम हो सकते हैं।

+0

thx, मैंने कोशिश की, लेकिन अभी भी काम नहीं कर रहा है। मैंने पोस्ट अपडेट किया है – teloon

0

gcc में -fpermissive विकल्प है: इसे आज़माएं और देखें कि कम से कम कुछ त्रुटियां गायब हो गई हैं या नहीं। साथ ही: एक ही शीर्षलेख फ़ाइल बनाने का प्रयास करें जिसमें सभी निर्देशों का उपयोग करने के साथ आवश्यक शीर्षलेख शामिल होंगे।

#include <vector> 
#include <iostream> 
#include <stack> 
... 

using std::vector; 
using std::fstream; 
... 

सभी एक ही साथ विरासत सी ++ हेडर फाइल का उल्लेख बदलें stdinc.h के शामिल हैं: उदाहरण के लिए, stdinc.h युक्त हैं। पुराने सी ++ में नामस्थान नहीं थे, इसलिए यदि आप व्यक्तिगत निर्देशों को केवल using namespace std; के साथ प्रतिस्थापित करते हैं, तो संघर्ष संभव नहीं है।

0

तो केवल एक चीज

#include <vector.h> 

#include <vector> 
using namespace std; 

है क्यों sed की कोशिश नहीं कर रहा?

grep सभी के लिए यह देखने के लिए शामिल है कि सी ++ शीर्षकों की तुलना में अन्य शामिल हैं या नहीं। यदि आपका भाग्यशाली नहीं है।

एक और चीज जो अधिक मुश्किल है यह है कि पुराना कोड है जो गैर-मानक तरीके से डेटारेटर के माध्यम से डेटा तक पहुंचने पर निर्भर करता है। मैंने देखा कि लिनक्स के लिए डूम मानचित्र संपादक में। फिर आपको मैन्युअल सामान करने की आवश्यकता हो सकती है।

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

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