2011-12-07 7 views
1

"프론트 엔드"라이브러리와 다중 "백엔드"라이브러리를 빌드하는 라이브러리 프로젝트를 유지 관리하고 있습니다. 이 프로젝트는 Libtool을 포함하여 Autotools 제품군 (학습 중이며 프로젝트 구현에 유지 관리가 필요함)을 사용합니다. 공유 라이브러리로서 모든 것이 잘 작동합니다. 우리는 라이브러리를 사용하는 응용 프로그램 개발자가 있으며 여러 플랫폼에서 소프트웨어를 쉽게 배포 할 수 있도록 정적 라이브러리를 사용하여 빌드하는 것을 선호합니다 (나는 그의 동기에 대해 논쟁하고 싶지 않습니다).Autotools와 여러 빌드 디렉토리로 하나의 정적 (편의?) 라이브러리 만들기

그는 이전의 시점에서 빌드 시스템을 사용하여 하나의 큰 정적 라이브러리를 만들 수 있었지만 더 이상 할 수 없다고 말했습니다. 이 문제가 발생했을 때 정확히 추적 할 수 없었지만 두 가지 변경 사항 중 하나와 관련이 있다고 의심됩니다. 첫 번째 변경은 번들 된 libtool 소스 디렉토리를 제거한 것입니다. 두 번째 방법은 이전과 마찬가지로/usr/local/lib (기본 위치)에 분산시키기보다는 백엔드 라이브러리를/usr/local/lib/project에 배치하는 것입니다.

필자가 배울 수 없었던 것은 프론트 엔드 라이브러리와 백엔드를/usr/local/lib에있는 하나의 편리한 라이브러리에 결합하고 Autotools 프레임 워크 내에서 그렇게하는 방법입니다. 이것은 가능할 것으로 보이지만 나는 배울 예제를 찾지 못했습니다.

이외에도 프로젝트는 테스트 스위트의 일부로 몇 가지 유틸리티를 빌드합니다. --disable-shared 옵션으로 configure를 실행 한 다음 make를 실행하면 유틸리티가 프로젝트 라이브러리에 정적으로 링크됩니다. 이제 제 기능은 제 3 자 응용 프로그램에서 사용할 수 있도록하는 것입니다.

+0

버전 관리에서'git bisect'와 동일한 명령을 실행하여 커밋이 어떤 커밋인지 확실하게 확인 했습니까? – ptomato

+0

아니요. 나는 그가 사용했던 명령과 그가 당시 자신의 대본을 사용하고 있는지 확실하지 않습니다. 또한, 정적 라이브러리를 신경 쓰지 않았던 방식으로 라이브러리를 직접 만들지 않았습니다. 나는 이것을 약 1 년 전에 처음 알았고, 온 - 오프로 대답이나 최소한의 단서를 찾고있었습니다. –

답변

2

Libtool의 특수 용어에서 편의 라이브러리는 설치되지 않은 라이브러리입니다. 접두어가 noinst_ 인 Automake에 선언되어야합니다.

여러 개의 편의 라이브러리 중 라이브러리 L을 빌드하는 경우 : 모든 편의 라이브러리를 모아 하나의 설치 라이브러리 L을 빌드합니다. 이것은 L이 공유 라이브러리인지 정적 라이브러리인지에 관계없이 발생합니다.

내 생각 엔 당신이 세 번째 변화를 가지고있다 : 어쩌면 모든 백엔드 라이브러리가 편리했던 과거에 (즉, noinst_) 라이브러리 있도록 효과적으로 수행 단 하나의 .so.a 결국 설치되었다; 어떤 시점에서 모든 백엔드 라이브러리를 자체적으로 설치하기로 결정 했으므로 (즉, noinst_pkglib_ 또는 그 이상으로 변경) 이러한 라이브러리는 편의 라이브러리가 아니며 더 이상 프론트 엔드에 포함되지 않습니다.

설치된 백엔드 라이브러리가 프론트 엔드 라이브러리에 여전히 _LIBADD으로 나열된 경우에도 Libtool에서이 종속성을 기록합니다. frontend.la 파일 (이 경우 라이브러리 사용자 인 경우에도 libtool을 연결해야 함)에 연결할 때마다 frontend.la이 정적 또는 공유 라이브러리로 컴파일되었는지 여부에 관계없이 Libtool에 백엔드 라이브러리가 포함되어야합니다.

추 신 : 백엔드 라이브러리가 프론트 엔드에 의해 실제로 Libtool 모듈 (a.k.a. 플러그인) 인 경우 문제가 약간 다를 수 있습니다.

+0

정보를 제공해 주셔서 감사합니다. 더 많은 것을 알게되면 나에게 더 의미가있게 될 것입니다. 구성을 연구하면서 해당 키워드에 대해 알아볼 것입니다.ac 및 다양한 Makefile.am 파일. –

+0

BTW, Git 저장소는 LGPL/GPL 라이브러리 인 http://hamlib.git.sourceforge.net/git/gitweb.cgi?p=hamlib/hamlib;a=summary에 있습니다. 다양한 라디오 컨트롤 프로토콜을 통일 된 API로 변환하기위한 것입니다. 약간의 grepping은 모든 백엔드 라이브러리가'pkglib_LTLIBRARIES = hamlib-backend.la' / –

관련 문제