일전에 build 수행시 boost library 경로를 잘 못 설정해서 일주일 정도 문제 원인 분석에 애를 먹었던 적이 있는데,
요약하면 아래와 같다.
1. 프로젝트 코드가 참조하는 boost library header dir -> 'A'
2. tool chain에 포함된 boost library header dir -> 'B'
명시적으로 프로젝트 코드가 'A'를 참조하도록 make option을 작성했으나,
결과적으로 잘못된 dir를 기술하여 build시에는 'B'가 참조되었다.
- toolchain의 cpp(C Pre-Processor)를 사용하여 아래와 같이 명령을 내려보면 toolchain이 참조하는 system include dir를 확인할 수 있다.
$ cpp -v
...
#include "..." search starts here:
#include <...> search starts here: <- 여기서부터 toolchain이 참조하는 system include dir 시작
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
회사에서 사용하는 toolchain system include dir를 확인해본 결과 dir중 하나에 boost library dir가 공교롭게 포함되어 있었던 것.위 결과를 확인하기 전까지는 회사에서 사용중인 toolchain에 boost library가 포함된 것을 알고 있지도 못했다.
해당 문제와 같은 유사 문제가 발생하지 않도록 makefile내 compile option에 "-Wmissing-include-dirs"를 추가하도록 하였다.
만약 존재하지 않은 dir를 참조할 경우 아래와 같이 warning을 출력해 준다.
$ g++ -c -Wall -Wmissing-include-dirs -I/non_exist_dir test.cpp
cc1plus: warning: /non_exist_dir: No such file or directory [-Wmissing-include-dirs]
소스코드 compile시에 추가하면 좋은 warning option들이 아래 site에 소개되어 있다.
http://www.network-theory.co.uk/docs/gccintro/gccintro_32.html
댓글 없음:
댓글 쓰기