gcc 가 헤더 파일 찾는 방법 때문에 헤매다!
요즘 OS/2 빌드 프로그램들을 크로스 컴파일용으로 만들고 있다. OS/2가 아무래도 32비트 OS이다보니 최신 프로그램들의 소스를 컴파일하려면 메모리가 부족한 경우가 종종 생긴다. CI를 요구하는 프로젝트도 있고, 메모리 제한도 극복해보고자 시도하고 있다. 우선 시작으로 binutils를 빌드하고 있는데, 이상하게 오류가 났다. 분명히 있는 헤더 파일을 찾지 못하고 있었다. 타겟을 OS/2로 해서 그런가 싶어 소스 타볼을 받아 그대로 컴파일 시도를 했는데 역시나 마찬가지 오류가 났다. 한참을 헤매다 gcc의 헤더 파일 검색 순서를 보기 위해 '-v' 옵션을 주어 확인해 보았더니, '-I.' 이 무시되고 있었다. 이유는 시스템 디렉토리하고 겹치기 때문에. 시스템 디렉토리에는 '.' 이 없었다. 이 경우에는 'C_INCLUDE_PATH' 였다. 도무지 이유를 알 수 없었으나, 'C_INCLUDE_PATH' 가 ':'으로 끝나는 게 보였다. 혹시나 ':' 이후에 아무것도 없으면 '.'으로 처리하나 싶어서 마지막 ':'을 없앴더니 문제없이 컴파일되었다. 그런데 막상 'C_INCLUDE_PATH' 는 ':' 으로 끝나지 않았다. 실제 내용은 .bashrc 에 다음처럼 되어 있었다. export C_INCLUDE_PATH=$HOME/usr/include:$C_INCLUDE_PATH 알고봤더니 .bashrc 가 실행되는 시점에 C_INCLUDE_PATH 가 정의되어 있지 않아서 ':'으로 끝난 것이었다. 결국 이 때문에 '.' 이 헤더 파일 검색 디렉토리에 추가되었고, '-I.' 으로 지정된 디렉토리가 무시된 것이었다. 그러다 보니 다른 디렉토리에 있는 같은 이름의 파일이 인클루드되었고, 결과적으로 오류가 발생했던 것이었다. 그래서 C_INCLUDE_PATH 가 정의되어 있...