2010-02-08 5 views
8

32 비트 시스템이 있고 여기에 우분투 9.10이 실행 중입니다. 최신 gcc 컴파일러가 있습니다. 내가 직면 한 문제는 내가 2002 년에 개발 된 라이브러리를 가지고 있다는 것입니다. 코드가 맞았지만 빌드하려고하면 iostream.h를 찾을 수 없으므로 오류가 발생합니다 : fstream.h : No such such 파일 또는 디렉토리 등. 파일이 많아서 변경할 수 없습니다.iostream.h, fstream.h를 찾을 수 없습니다.

해결되면 이러한 오류를 해결할 수 있습니까? gcc 3.0을 설치할 수 있습니까? 그렇다면 기존 gcc 컴파일러에 설치하는 방법.

+0

코드 (포함 섹션 만), 경로 포함 등을 게시 할 수 있습니까? –

+1

gcc 또는 g ++를 사용하고 있습니까? – zdav

답변

4

표준이 아닌 C++ 라이브러리를 다루고 있으며 표준 컴파일러로 컴파일되지 않는다는 것을 알았습니다. iostream.h를 두 줄인 #include <iostream>using namespace std;으로 작성하여 빠르게 해결할 수 있습니다. 그것은 신뢰할 수 없으며 불편한 시간에 나타날 버그를 찾기 힘들 수 있습니다.

다른 곳의 라이브러리 인 경우 업데이트되었는지 확인할 수 있습니다.

실현해야 할 것은 코드가 더 이상 올바르지 않다는 것입니다. 일부 구현에서는 올바른 시간 일 수 있지만 지금은 아닙니다. (원래 gcc 3.0 용 이었는지 확신 할 수 있습니까? 사전 표준 컴파일러는 표준이 아니었고,별로 좋지 않았습니다. 표준을 사용하지 않는 것이 좋습니다.) 원래 시스템을 설치하면 라이브러리와 올바르게 인터페이스 할 수 있으며 새 코드가 작동하지 않습니다. 현대 코드와 인터페이스하지 않는 라이브러리는 제한적으로 사용됩니다.

그렇지 않으면 라이브러리를 변경할 수없는 태도를 포기하고 표준 C++로 변환해야합니다. 버그 수정이 상당히 쉽고 (for (int i = 0;...)의 범위와 비슷 함), 약간의 미묘한 문제 일 수 있습니다. 코드가 특정 컴파일러에 맞을 수도 있지만 지금은 아닙니다.

1

왜 검색

#include <iostream> 

그리고 다른 사람에 대해 동일한와

#include <iostream.h> 

의 모든 인스턴스를 대체하는 스크립트를 쓸 수 있을까?

업데이트 : 내가 다른 대답에 동의, 아래의 코멘트 ... 내가 문을

There are lots of files hence I cannot change them

생각하지 않기 때문에 비록이 답변을 떠날거야하는 것은 유효합니다 :)

+0

헤더를 사용하는 코드는 업데이트되지 않으므로. 사전 표준 라이브러리와 표준화 라이브러리에는 일반적으로 여러 가지 비 호환성이있었습니다. –

+0

@ 존 - 2003 년쯤에 한번 생각해 보았습니다. 1992 년 빈티지의 일부 C++ 코드가 있습니다. 그것보다 조금 더 많은 것으로 밝혀졌습니다. 수업은 동일하지 않습니다. 그리고 컴파일 된 후에는 실행 시간에 매달렸습니다. 아마도 스트림의 끝 (end-of-stream) 상태가 다르게 전달되는 것과 관련이 있습니다. 어쨌든, 나는 그 노력을 포기했다. –

4

fstream.h 및 이와 유사한 파일은 최신 컴파일러와 함께 제공되는 fstream 및 이와 유사한 파일 (C++ Standard에서 지정)의 사전 표준 버전입니다. 이 두 가지 파일은 일반적으로 호환되지 않습니다. 솔직히, 아무도 지난 8 년 동안 표준을 준수하도록 라이브러리를 업데이트하지 않으면 사용 가치가 없을 것입니다.

+0

좋은 지적! 포함을 업데이트하더라도 다른 문제가 남아있을 것이라고 누가 말할까요? –

+0

@John Weldon : 제 경험상, 어떤 고약하고 어려운 문제가있을 수 있습니다. –