다음 이전 차례

5. 부가적 내용들

nm 명령

nm명령은 주어진 라이브러리의 심볼목록을 보고한다. 그것은 공유 및 정적라 이브러리 모두에서 동작한다. 주어진 라이브러리의 정의된 심볼명과 값 그리고 타잎을 알려준다. 이 명령은 또한 라이브러리에서 이 정보가 유효하게 되어있 다면(-ls옵션을 보라) 소스코드상의 어디에서 심볼이 정의되었는가(파일이름과 라인넘버로)도 알려준다.

심볼타잎에 대해서는 좀더 설명이 필요하다. 타잎이 보고될 때 소문자는 지역 변수임을 나타내며 대문자는 전역(외부)변수임을 나타낸다. 전형적인 심볼타잎 에는 T(코드부분에서 보통의 정의), D(초기화된 데이타 부분), B(초기화 않된 데이터 섹션), U(미정의:심볼이 라이브러리에서 사용되나 그 라이브러리에 의 해서 정의되지 않음), W(다른 라이브러리가 이 심볼을 정의하면 그 내용이 이 를 대치(override)함)등이 있다.

함수의 이름은 알고 있지만 정확히 어느 라이브러리에서 정의되어있는지 모 른다면 nm 명령의 -o옵션(각 라인마다 파일명을 앞에 보여줌)을 사용하고 동 시에 grep명령을 써서 라이브러리의 이름을 찾아보길 바란다. Bourne shell에서 /lib, /usr/lib의 모든 라이브러리와 /usr/lib, /usr/local/lib의 직계 서 브디렉토리에서 "cos"를 찾는 것은 아래와 같을 것이다.


nm -o /lib/* /usr/lib/* /usr/lib/*/* 
   /usr/local/lib/* 2> /dev/null | grep 'cos$'

더 이상의 자세한 내용은 [17]info:binutils#nm을 참조하라 공유 라이브러리는 스크~Pl트일수 있다.

GNU 로더는 공유 라이브러리가 바이너리 이외에도 특정한 스크립트언어로 작성된 텍스트파일로도 가능하도록 허용하고 있음을 알필요가 있다. 이것은 간 접적으로 다른 라이브러리들을 조합하는데 유용하다. 예를 들어 나의 시스템중 의 하나에 사용된 /usr/lib/libc.so의 목록이 아래에 나와있다.

/* 공유 라이브러리를 먼저 사용하며 단 어떤 함수들은 정적 라이브러리이므 로 그것을 다음차례로 사용하는 GNU ld script임. */ GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a ) 더 많은 내용은 ld 링커에 관한 texinfo 문서를 보라. 일반적인 정보는 info:ld#Options, info:ld#Commands, 그리고 비슷한 info:ld#Option Commands 등에서 찾아보라

GNU Libtool

다양한 시스템에 이식가능한 응용프로그램을 제작중이라면 GNU Libtool을 사용하여 라이브러리를 만들고 설치할 것을 고려해 보라. GNU Libtool은 전 형적인 라이브러리 지원 스크립트이다. Libtool은 라이브러리 사용의 복잡성 을 일관되고 이식가능한 인터페이스를 통해서 제거해줄 것이다. Libtool은 오 브젝트 파일의 생성, 정적 및 공유라이브러리의 링크, 실행 바이너리의 링크 및 디버그, 라이브러리의 설치, 실행 바이너리의 설치를 위한 이식적 인터페이 스를 제공한다. 그안에는 libltdl이라는 동적적재 프로그램을 위한 이식성 wrapper가 또한 포함된다. 더 많은 정보는 [19] www.gnu.org/software/libtool/manual.html 에서 찾아보길 바란다.


다음 이전 차례