2010-08-12 3 views
2

BSD 플랫폼의 응용 프로그램을 Linux로 포팅하는 중입니다. 컴파일 할 때 헤더 파일 중 일부가 내 컴퓨터에서 누락 된 <bits/stl_alloc.h>을 호출하는 것으로 나타났습니다. 아무도 내가 이것을 찾을 수있는 곳으로 그리고/또는 그것이없는 이유에 대해 어떤 생각을 가지고 있습니까?C++ - Fedora 12의 GCC4.4.4에서 stl_alloc.h가 누락 되었습니까?

GCC4.4.4를 사용하는 Fedora 12 시스템을 실행 중입니다.

+3

stl_alloc.h는 표준 C++ 헤더 파일이 아니며 단지 그것을 잡으면 거의 전혀 도움이되지 않습니다. 응용 프로그램을 이식하려면 대상 플랫폼에 동일한 소스 코드 파일 만 있으면됩니다. –

+0

비트 하위 디렉토리에는 아무 것도 포함하면 안됩니다. 표준은 오직 주 디렉토리에있는 파일들만 정의합니다. 사용되는 하위 디렉토리는 구현 세부 사항입니다. –

+0

아마도 내가 분명히해야 할 것입니다 -이 파일을 찾는 헤더 파일이 있습니다. 이 헤더 파일이 없으면 모든 종류의 정의되지 않은 문제가 발생합니다. 그래서 진짜 궁금한 점은 대신 구현할 수있는 stl_alloc과 동일한 기능을하는 Linux가 있다는 것입니다. – Justin

답변

1

오류 메시지는 비트 디렉터리의 파일이 없음을 나타냅니다. 이 경우 가능한 두 가지 방법이 있습니다.

  1. 이 파일은 응용 프로그램에서 명시 적으로 포함 시켰습니다. 표준 헤더가 아니기 때문에 그 때 당신의 잘못이고, 표준 포함 경로에 없을 수도 있습니다. 이렇게하지 마십시오. OS와 상호 작용하는 데 필요한 메커니즘의 대부분은 표준 라이브러리 (또는 특히 이식성을 위해 설계된 다른 라이브러리)에 있으므로 특정 STL 구현 비트를 사용하는 것보다 나은 솔루션을 제공합니다.

  2. 이 파일은 STL의 일부 표준 헤더에서 간접적으로 포함됩니다. 문제는 Fedora에서의 STL 구현이 이식 가능하고 BSD를 일부 지원할 수 있다는 것입니다. 헤더에 다음 코드가있을 수 있습니다.

    #ifdef __BSD__ 
    // BSD-specific include file 
    #include <bits/stl_alloc.h> 
    #elsif defined __LINUX__ 
    #include <bits/linux_alloc.h> 
    #endif 
    

    일반적으로 Linux에서 개발 된 프로그램에는 올바른 파일이 포함됩니다. 그러나 프로그램이 자체적으로에 BSD 지문을 정의했을 수 있으며이 지문은 BSD 관련 부분을 포함해야하므로 STL 구현시 잘못 해석 될 수 있습니다. BSD에서만 빌드했다면, 전혀 눈치 채지 못했을 것입니다.