사용하신 소켓쪽 함수들의 man 페이지를 보시면 보통 맨 앞쪽에 그 함수들
이 어떤 라이브러리를 참조하는지 나옵니다.
제 경우 HP-UX 에서 개발된 PRO*C 프로그램을 SUN Solaris로 포팅한 적이 있
는데, HP-UX에서 필요하지 않던 라이브러리들을 Solaris에서 추가로 요구하
는 바람에 컴파일러 스크립트를 고쳤었죠.(쉽계 말해서 libaio.a,
libthread.a 와 같은 라이브러리가 필요 없을수도 있고, 다른 라이브러리들
을 참조할 수도 있다는 말이죠) 요점은 O/S, C 라이브러리, 컴파일러 별로
특정 함수에 필수적인 라이브러리들이 바뀔 수 있다는 겁니다. man 페이지
를 참고하셔서 필요한, 또는 필요없는 라이브러리들을 발견하시면 컴파일 스
크립트의 -l<라이브러리이름> 등으로 주어지는 옵션을 고치시면 될것같습니
다.
이렇게 하신 뒤 링크 또는 실행시킬 때 라이브러리를 찾지 못하는 현상이 생
기면 /etc/ld.so.conf 에 필요한 라이브러리들이 저장된 PATH를 주욱 적어주
시고(PATH별로 각각의 라인에 적으면 됩니다. 파일 열어보면 금방 알죠)
ldconfig 명령을 수행하면 다음부터는 정상적으로 동작할 겁니다. 리눅스에
서는 LD_LIBRARY_PATH 환경변수만 세팅한다고 해서 라이브러리를 참조하는
것은 아니고, 명령을 수행해야 하는 거죠.
env_precomp.mk 파일은 PRO*C 의 작동에 필요한 각종 환경변수들과 실제 샘
플 프로그램 컴파일에 필요한 매크로 등이 들어 있습니다.
사실 make 프로그램을 가지고 컴파일을 하면 컴파일된 오브젝트들의 버젼 내
지는 컴파일 시간을 체크하기 때문에 손쉽게 바이너리들을 엎어 치기가 힘들
죠 그래서 간단한 shell 스크립트를 작성하게 되는데, 손쉬운 방법은 다음
과 같습니다.
PRO*C 샘플 프로그램들이 아마 $ORACLE_HOME/precomp/demo/proc 디렉토리에
있을겁니다. 컴파일용 make 파일인 demo_proc.mk도 같이 있구요.
make -f demo_proc.mk sample2 > pc
이렇게 하면 sample2.pc 를 컴파일하면서 실행되는 명령들 전체와 출력된 내
용이 전부 pc라고 하는 텍스트 파일에 저장됩니다.
이걸 열어서 proc 프리컴파일러를 호출하는 부분하고 gcc 로 컴파일/링크하
는 부분만 남기고 컴파일러들이 출력하는 메세지를 전부 지웁니다.
그 다음 sample2 를 $1 로 치환합니다. 이것을 저장하고 실행 퍼미션을 주
면 이 스크립트를 사용해서 (pc sample2 와 같이) 간단히 컴파일 할 수가 있
게 됩니다. 실제 개발할때는 make파일을 안쓰고 대부분 이런 컴파일러 스크
립트를 사용하죠.
참고가 되셨길 바랍니다.
: 안녕하세요...
:
: 지난번에 한번 질문을 올렸었는데... 좋은 대답에 감사합니다.
:
: 이번에 드릴 질문은 유닉스용 라이브러리에 대한 내용입니다...
:
: 저희 서버가 소켓통신과 오라클에 라이브러리를 참조하여 데몬이 되는
:
: 프로그램을 하나 돌리는데 (참고로 프로그램은 외부에서 짰슴) 이 프로그
램이
:
: 유닉스용 라이브러리들(Ex.libaio.a, libthread.a)와 같은 라이브러리들을
:
: 참조합니다.
:
: 다행히 gcc로 컴파일은 됩니다만 링크할 때 이런 라이브러리들이 없다는
에러가
:
: 발생합니다.
:
: 어떻게 해야 할까요...
:
: 리눅스에서 해결하지 못하면 Solaris 쪽으로 가야합니다...
:
: 시간이 촉박한 문제이니 고수분들의 답변바랍니다..
:
: 아울러 oracle의 env_precomp.mk라는 파일의 용도를 알고 싶습니다.