2012-12-24 9 views
2

프로젝트에 Boost의 Dynamic_bitset 클래스를 사용하려고하는데, 전체 라이브러리에서 필요한 파일의 하위 세트를 가져 왔습니다. 지금은 내 manager.cpp 파일 내부에"해당 파일이 없습니다."부스트 dynamic_bitset과 관련된 문제 포함

#include "boost/dynamic_bitset.hpp"을 수행하고있어 내가받을 컴파일 할 때이 :

In file included from manager.cpp:4:0: 
boost/dynamic_bitset.hpp:15:51: fatal error: boost/dynamic_bitset/dynamic_bitset.hpp: No such file or directory 

프로젝트 폴더 내의 파일 ierarchy은 다음과 같이 진행됩니다

proj/extras.h 
proj/Makefile~ 
proj/manager.cpp 
proj/boost 
proj/boost/limits.hpp 
proj/boost/dynamic_bitset.hpp 
proj/boost/mpl 
proj/boost/mpl/if.hpp 
proj/boost/mpl/has_xxx.hpp 
proj/boost/iterator.hpp 
proj/boost/static_assert.hpp 
proj/boost/dynamic_bitset 
proj/boost/dynamic_bitset/dynamic_bitset.hpp 
proj/boost/dynamic_bitset/config.hpp 
proj/boost/config 
proj/boost/config/select_platform_config.hpp 
proj/boost/config/select_compiler_config.hpp 
proj/boost/config/user.hpp 
proj/boost/config/suffix.hpp 
proj/boost/config/select_stdlib_config.hpp 
proj/boost/dynamic_bitset_fwd.hpp 
proj/boost/config.hpp 
proj/boost/type_traits 
proj/boost/type_traits/is_same.hpp 
proj/boost/type_traits/is_pointer.hpp 
proj/boost/type_traits/remove_pointer.hpp 
proj/boost/type_traits/remove_const.hpp 
proj/boost/type_traits/is_base_and_derived.hpp 
proj/boost/type_traits/detail 
proj/boost/type_traits/detail/bool_trait_def.hpp 
proj/boost/type_traits/detail/yes_no_type.hpp 
proj/boost/pending 
proj/boost/pending/integer_log2.hpp 
proj/boost/detail 
proj/boost/detail/limits.hpp 
proj/boost/detail/dynamic_bitset.hpp 
proj/boost/detail/workaround.hpp 
proj/boost/lowest_bit.hpp 
proj/Makefile 
proj/generator.cpp~ 
proj/generator.cpp 

이 동일한 프로젝트는 내 대학의 리눅스 시스템에서 잘 컴파일되지만 (g ++ 4.2.4가 있지만 문제가 될지는 의심 스럽지만) 위의 오류로 인해 우분투 랩톱에서 그렇게하지 못합니다. 분명히 존재하기 때문에 파일을 찾지 않는 이유는 무엇입니까?

모든 내 포함과 같은있다 : 나는 명시 적으로 (현지 ..) 폴더를 포함 할 경우

#include <cstdlib> 
#include <cstdio> 
#include <iostream> 
#include "boost/dynamic_bitset.hpp" 
#include <cmath> 
#include <list> 
#include <unistd.h> 
#include <sys/sem.h> 
#include <sys/shm.h> 
#include <errno.h> 
#include <wait.h> 
#include <time.h> 
#include "extras.h" 

컴파일이

g++ -o manager manager.c 또는 g++ -Iboost -o manager manager.c

로 간단하게 이루어집니다

+0

그리고 include 디렉토리가'boost/dynamic_bitset'를 가리 킵니까? –

+0

흠, 부스트 lib는 소스 폴더 자체에 있습니다. 다른 곳에서도 선언 할 필요가 없습니다. -i 옵션을 사용하여 컴파일을 시도하고 명시 적으로 부스트 폴더를 포함하지만 동일한 오류가 발생했습니다. – Neyoex

+0

아, 미안 해요. '# include '에 "..."또는 <...>을 사용하고 있습니까? 전자는 "당신의 로컬 인클루드 디렉토리를 먼저 본다"는 의미이며, 후자는 "이것은 시스템 인클루드이므로 시스템 디렉토리를 살펴 봅니다."일반적으로 현재 디렉토리는 "시스템 인클루드 디렉토리"의 일부가 아닙니다. 코드에 #include <...>이 아닌'#include "..."'가 있어야합니다. –

답변

1
-I . 

적어도 부스트를 포함하는 동일한 디렉토리에서 컴파일하는 경우.

당신은 -Iboost와 #include "boost/..."라고 썼습니다. 그래서 부스트 서브 디렉토리가 있다면 ./boost를 찾는다.

+0

그래, 그 중 하나입니다. –

+0

맞아요, 맞습니다.하지만 그 이유는 모르겠습니다. 원래의 dynamic_bitset 헤더 (-I를 사용할 필요없이 발견 된)에서 요청 된 헤더를 포함시키기 위해 소스 폴더를 명시 적으로 선언해야했습니다. – Neyoex