2011-12-29 2 views
7

하이브리드 트리 구현 (중요하지 않음)을 찾고 있는데 "이전"하나를 찾습니다 here. 이전 컴파일러로 작성된 프로그램을 실행하는 방법은 무엇입니까?

저자

은하고 GCC-2.8.1 컴파일러 ( 솔라리스 2.6를 실행)에 SUN SPARC 플랫폼에이 코드를 시도했다. 그리고 내 환경은 gcc 버전 4.4.3 ( 우분투 10.10)입니다. 나는 그가 제공하는 메이크와 "make"를 실행 하지만, 다음과 같이 나에게 오류 메시지를 많이 제공 :

문제는

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과 같은 morden 컴파일러에 동의합니다. 그러나 나는 그것이 끝이 없다는 것을 안다.

내 질문은 :이 코드를 "현대식"으로 자동 변환하거나 독립형 "구식"컴파일러를 사용하여이 프로그램을 실행하는 데 편리한 방법이 있습니까?

제안 사항?

=== 업데이트 :

이 여러분 모두 감사합니다 ===, 나는이 오래된 버전의 GCC ( /usr/local/gcc-2.8.1/bin/gcc)를 사용하는 --prefix=/usr/local/gcc-2.8.1을 사용하고는 "메이크"수정 다른 디렉토리에 gcc2.8.1를 설치했습니다. 나는 "make"를 실행하면, 그것은 여전히 ​​나에게 헤더를 찾을 수 없다는 오류를 제공합니다

/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에서이 머리를 찾기 위해 노력했지만 아무것도 없어 .

그렇다면 구 버전 gcc의 헤드는 어디에 있습니까?

답변

-2

시작하려면 오류 메시지에 언급 된 시스템 헤더 파일에서 ".h"를 제거하십시오. 아마 다른 오류를 줄 것이지만, 하나씩 오류를 수정하려고 시도 할 것입니다.

+1

그는 특히 헤더의 이름을 바꾸는 것 이외의 해결책을 요구했습니다. –

+1

게다가, 헤더의 이름을 바꾸는 것은 그것의 끝 부분조차도 아니다. 그 경로를 가면 네임 스페이스에 대해서도 걱정해야한다. 예를 들어''은'std'에 모든 것을 넣는다. 반면에 ''는 그렇지 않다. – cHao

7

벡터가 포함 된 직접 vertor.h를 만들 수 있습니다. 이렇게하면 비 호환성을 비침 습적으로 수정할 수 있습니다.

편집 :

또한 헤더 파일 (들)에 using namespace std; 를 추가해야 할 수도 있습니다. 이것은 일반적으로 나쁜 생각 인 이지만 이것은 어쨌든 내가 할 수있는 한 가지 상황입니다.

일단 작동 시키면 새로운 스타일의 헤더 파일과 네임 스페이스를 사용하도록 다시 작성해야합니다.

+0

임포트하는 네임 스페이스는 컴파일러이므로, 앞에'# '는 없습니다! – ThiefMaster

+0

감사. 고칠 것입니다. 나는 C++이 녹슬 었다고 말했다. –

3

데비안 레니 (oldstable)에는 gcc 3.4가 있습니다. 이 경우 이전 버전과의 호환성이 향상 될 수 있습니다. 나머지 문제에 대해서는 호환성 헤더를 작성하고 -I 디렉토리 (예 : vector을 포함하는 vector.h 헤더 파일

자신에게 호의를 베푸고 오래된 코드를 건드리지 마십시오. 예상치 못한 방식으로 레거시 코드를 쉽게 파기 할 수 있습니다.

0

supports Solaris 2.6 인 QEMU에서 프로그램을 실행 해 볼 수 있습니다. 유일한 문제는 설치 디스크/이미지를 찾는 것일 수 있습니다. 또한 싼 가격으로 오래된 솔라리스 상자를 이베이 (eBay)에 판매하는 사람들이 있습니다.

GCC은 매우 오래된 버전의 다운로드를 제공합니다. 이전 버전의 컴파일러를 사용하면 더 나은 기회를 얻을 수 있습니다.

+0

thx,이 시도했지만 여전히 작동하지 않습니다. 게시물을 업데이트했습니다. – teloon

0

gcc-fpermissive 옵션을 가지고 있습니다. 적어도 일부 오류가 사라지는지 확인하십시오. 또한 : 모두 지시어 사용에 필요한 헤더가 포함될 단일 헤더 파일을 만들어보십시오.

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

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

모두가 하나와 기존의 C++ 헤더 파일의 언급 교체 stdinc.h의 포함 예를 들어, stdinc.h을 포함합니다. Old C++에는 네임 스페이스가 없으므로 개별 지시문을 using namespace std;으로 바꾸더라도 충돌이 발생할 가능성은 거의 없습니다.

0

유일한 것은

#include <vector.h> 

#include <vector> 
using namespace std; 

에 있으면 왜 나오지도 시도하지?

grep for all에는 C++ 헤더가 포함되어 있는지 여부가 표시됩니다. 운이 좋다면.

또 다른 까다로운 점은 비표준 방식으로 반복자를 통해 데이터에 액세스하는 데 의존하는 오래된 코드가 있다는 것입니다. 나는 리눅스 용 Doom 맵 편집기에서 그것을 보았다. 그런 다음 수작업을해야 할 수도 있습니다.

관련 문제