Beyond Linux® From Scratch (systemd Edition) - Version 12.1
Chapter 2. Important Information
이전	위로 / 처음으로	다음
BLFS Systemd Units	Libraries: Static or shared?

Libtool 아카이브(.la) 파일

확장자가 .la인 파일

LFS와 BLFS에서 많은 패키지는 내부적으로 제공된 libtool 사본을 사용하여 다양한 Unix 플랫폼에서 빌드합니다. 여기에는 Linux뿐만 아니라 AIX, Solaris, IRIX, HP-UX, Cygwin과 같은 플랫폼이 포함됩니다. 이 도구의 기원은 꽤 오래되었습니다. 최신 Linux 시스템보다 기능이 덜 발전된 시스템에서 라이브러리를 관리하기 위한 것이었습니다.

Linux 시스템에서는 일반적으로 libtool 특정 파일이 필요하지 않습니다. 일반적으로 라이브러리는 링크 단계에서 빌드 프로세스에서 지정됩니다. Linux 시스템에서는 실행 파일 및 동적 라이브러리에 ELF(실행 가능 및 링크 가능 형식)를 사용하므로 작업을 완료하는 데 필요한 정보가 파일에 포함되어 있습니다. 링커와 프로그램 로더는 모두 적절한 파일을 쿼리하여 프로그램을 적절하게 링크하거나 실행할 수 있습니다.

정적 라이브러리는 LFS와 BLFS에서 거의 사용되지 않습니다. 그리고 오늘날 대부분의 패키지는 정적 라이브러리에 대한 링크에 필요한 정보를 libtool에 의존하는 대신 .pc 파일에 저장합니다. pkg-config –static –libs 명령은 링커가 정적 라이브러리에 대해 링킹할 수 있는 충분한 플래그를 출력하므로 libtool의 마법 없이도 링킹할 수 있습니다.

문제는 libtool이 일반적으로 libtool 아카이브라고 하는 패키지 라이브러리용 텍스트 파일을 하나 이상 생성한다는 것입니다. 이 작은 파일은 확장자가 “.la”이며 라이브러리 또는 pkg-config 파일에 포함된 것과 유사한 정보를 포함합니다. libtool을 사용하는 패키지를 빌드할 때 프로세스는 자동으로 이러한 파일을 찾습니다. 간혹 .la 파일에 빌드 중에 사용되지만 설치되지 않은 정적 라이브러리의 이름이나 경로가 포함될 수 있는데, 이 경우 .la 파일이 시스템에 존재하지 않는 것을 참조하므로 빌드 프로세스가 중단됩니다. 마찬가지로 패키지가 업데이트되어 더 이상 .la 파일을 사용하지 않는 경우 이전 .la 파일로 인해 빌드 프로세스가 중단될 수 있습니다.

해결책은 .la 파일을 제거하는 것입니다. 하지만 문제가 있습니다. ImageMagick-7.1.1-28과 같은 일부 패키지는 실행 중에 필요에 따라 라이브러리를 로드하고 런타임에 종속성을 해결하기 위해 libtool 함수인 lt_dlopen을 사용합니다. 이 경우 .la 파일은 그대로 유지됩니다.

아래 스크립트는 불필요한 .la 파일을 모두 제거하고 기본적으로 일반 라이브러리 경로가 아닌 /var/local/la-files 디렉터리에 저장합니다. 또한 모든 pkg-config 파일(.pc)에서 .la 파일에 대한 임베디드 참조를 검색하여 애플리케이션 또는 라이브러리를 빌드할 때 필요한 일반 라이브러리 참조로 수정합니다. 필요에 따라 실행하여 문제를 일으킬 수 있는 디렉터리를 정리할 수 있습니다.