Autotools: A Practioner's Guide to GNU Autoconf, Automake, and Libtool, 6 장 (libtool을 사용한 라이브러리 구축)에서는 링크 라이브러리가 example입니다.libabc.so 대신 libabc.a에 링크하는 방법은 무엇입니까?
예에서 라이브러리 libjupiter.so
은 다른 라이브러리 libjupcommon.a
에 연결됩니다. libjupiter.so
에 PIC가 필요하므로 libjupcommon.a
이 아니기 때문에 첫 번째 시도가 실패합니다. 작성자는 libjupcommon_a_CFLAGS = -fPIC
을 추가하여 수정했습니다. 그것은 훨씬 나아졌지만 경고는 '공유 라이브러리 libjupiter.la를 정적 라이브러리 ../common/libjupcommon.a에 연결하면 이식 할 수 없습니다! '이 나타납니다.
따라서 저자는 libtool을 사용하여 libjupcommon.la
을 빌드하여 Makefile.am을 다시 수정합니다. libjupiter
은 libjupcommon.la
에 링크되어 있습니다. 이와 같이 :
noinst_LTLIBRARIES = libjupcommon.la
libjupcommon_la_SOURCES = jupcommon.h print.c
및
...libjupiter_la_LIBADD =
. ./common/libjupcommon.la
이번에는 문제가 없습니다. 이제
, 내 문제 :
나는 도서관이 단지 libjupiter
요구 libjupcommon
같은 다른 라이브러리를 필요로합니다. 차이점은 내 libjupcommon
이 다른 프로젝트에서 가져 와서 시스템에 설치되었다는 것입니다. noinst_LTLIBRARIES
이 아닙니다. .so
과 .a
버전이 있습니다. 위 예제와 같이 libjupcommon.la
을 연결하면 .so
이 선택되지만 동적 연결 관계는 필요하지 않습니다. 책의 예와 같이 .a
에 연결하고 싶습니다.
.a
에 명시 적으로 연결하면 (_LIBADD = .a 파일을 사용하여) 사용 가능한 라이브러리가 제공되지만 '휴대용이 아닙니다'라는 경고가 표시됩니다.
이 경우 .a
에 연결할 수있는 적절한 방법은 무엇입니까?
추 신 : book's official site에서 예제를 다운로드하십시오. autotools/book/jupiter-libtool-ch6/common
에서 Makefile.am의 noinst_LTLIBRARIES
을 lib_LTLIBRARIES
으로 수정하는 것이 내 문제와 유사해야합니다.
어떤 라이브러리를 만들 수 있습니까? 공유 라이브러리 또는 정적 라이브러리? 공유 라이브러리를 빌드한다면 설치된'.a' 라이브러리와 링크하는 것은 의미가 없으므로 libtoool 경고입니다. 정적 라이브러리를 빌드하는 경우 명시 적으로 그렇게 지정해야합니다 (ldav1s 응답 참조). – adl
공유 라이브러리를 만들고 싶습니다. 설치된'.a'가 PIC 일지라도 말이되지 않습니다. 왜 그래야만하지? –
그러나이 경우'.a'는 Libtool에 의해 생성되지 않았습니다. 내가 아는 한, Libtool에 의해 설치된'.a' 파일은 PIC가 아닙니다. – adl