Systems/Unix2012.05.08 12:23

제가 쓰고 있는 Linux 배포판은 Centos입니다. 이 배포판에는 FUSE, 그러니까 Filesystem In Userspace 모듈이 함께 깔려 있습니다. 이 모듈은 사용자가 커널이 아닌 사용자 주소 공간에서 파일 시스템을 만들 수 있도록 해 줍니다. 


FUSE 프로젝트의 웹사이트는 http://fuse.sourceforge.net/ 입니다.


이 웹사이트에 가보시면 예제 파일이 하나 있습니다. hello world 파일 시스템이 그것인데요. 이 예제 파일 시스템을 컴파일하려면 약간의 준비작업이 필요합니다. 


먼저, 수퍼유저 계정으로 가셔서 다음과 같이 합니다.


#> yum install fuse-devel 


이렇게 하시면 fuse 라이브러리를 사용해서 파일 시스템을 구현하는 데 필요한 헤더 파일이 설치됩니다. 헤더 파일이 설치되는 위치는 대략 다음과 같습니다.


/usr/include/fuse.h

/usr/include/fuse/*.h


헤더 파일의 설치가 끝나면 이제 웹 사이트에 올려져 있는 예제 파일 시스템을 컴파일해 볼 수 있습니다. 


#> gcc hello.c


그런데 이렇게 하시면 아마 컴파일이 잘 안되실 겁니다. 



-D 플래그를 사용하라니까 그렇게 해 줘야 겠죠. 그런데 그렇게 해 봐도 잘 안됩니다. 



이 문제를 해결하기 위해서는 fuse.h의 documentation에 적혀 있는 다음과 같은 문구를 참조해야 합니다.



그러니까, 결국 다음과 같이 컴파일 해 줘야 하는 셈입니다. 



그런데 보시면 아시겠지만 그렇게 해도 뭔가 잘 안된다는 걸 알 수 있죠. 예제에 사용된 소스코드의 버전이 낮아서 그런 것인데요 (오픈소스 프로젝트에서 종종 발견되곤 하는 문제입니다), 따라서 소스 코드를 다음과 같이 수정해줘야 합니다. 즉, fuse_main을 호출하는 부분에 맨 마지막 인자로 0을 (아무것도 넘기지 않는 다는 뜻) 넘겨주어야 합니다. 




이렇게 하고 컴파일하면 잘 되는 것을 확인할 수 있습니다. (오호)



물론 이렇게만 하면 되는 것은 아니고, 실행이 가능하려면 fuse 라이브러리와 링크도 해 줘야 합니다. 그러니 다시 정리하자면, 


#> gcc -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -lfuse -o hello -c hello.c


와 같이 해 주셔야 된다는 것이 결론. 물론 소스 코드를 조금 고쳐주셔야 한다는 것은 잊지 마실 것.


저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 저에게도 환청이 들려오는 것 만 같습니다 ㅠ
    얘기들 들어보면 정말 대단한 분들이 많지요

    2012.05.10 12:55 신고 [ ADDR : EDIT/ DEL : REPLY ]