2014-05-15 5 views
17

libtool 라이브러리와 exectuables를 혼합하여 사용하는 automake 프로젝트를 설치하려고하는데, automake 문서 인 grop을 사용하는 데 어려움을 겪고 있습니다. 컴파일러에게 링크를 지시하는 것과 관련이있다.LDADD와 LIBADD의 차이점은 무엇입니까?

누군가 LDADDLIBADD의 차이점을 설명 할 수 있습니까?

것 같은 :

  • 때 다른 이상 사용 하나, 하나가 -lname_of_library 스타일의 값을 대 직접 파일 이름을 소요
  • 입니다 등 난을 읽으려고 할 때마다

관련 문서, 그것은 내가하지 않는 것들을 알고 있다고 가정하는 것처럼 보입니다.

답변

25

라이브러리에는 기본으로 LIBADD을 사용하고, 실행 파일에는 LDADD을 사용하십시오. 다른 라이브러리 libbar.la에 의존 libtool이 라이브러리 libfoo.la을 구축한다면, 당신은 사용한다 :

libfoo_la_LIBADD = libbar.la 

다른 비 libtool이 라이브러리를 가지고 있다면, 당신은 또한 -L-l 옵션이를 추가 :

libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng 

일반적으로 이러한 추가 라이브러리를 찾기 위해 구성 스크립트를 사용하고, 그들을 통과 AC_SUBST을 사용 :

libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS) 
프로그램에 대한

, 단지 LDADD를 사용

myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog. 

때때로 경계가 조금 애매하다. myprog_LDADD$(EXTRA_FOO_LIBS)이 추가되었을 수 있습니다. libtool ( .la) 라이브러리에 종속성을 추가하고 libtool을 사용하면 모든 플랫폼 관련 링커 마술을 수행하는 것이 일반적으로 최선의 방법입니다. 모든 링커 메타 데이터를 한 곳에서 유지합니다.

9

도 서 중 하나에서 언급했듯이 LDADD은 ADD (Additionary Linker) 항목, 즉 링크를 수행 할 때 추가되는 항목입니다. 이것은 예를 들어 프로그램을 제작할 때입니다. LDADD은 다음을 지정할 수 있습니다.

  • libtool 파일 lib/libfudge.la
  • 라이브러리 -lm 또는
  • 라이브러리에 대한 전체 경로 /lib/libmagicalwonderland.a
  • 링크 플래그 & 라이브러리 -L/opt/lib -lmagical

그들은 우선 순위에 따라 - 그들은 존재할 수도 있고 존재하지 않을 수도있다 사물을 가리키고으로 마지막 두 단지 문제에 대한을 요구하고 사용.

LIBADD은 사용할 ADLitional Libraries를 지정하는 것입니다.이것은 라이브러리를 빌드하거나 라이브러리를 사용하기 위해 추가 라이브러리가 필요하다는 것을 지정하기 위해 라이브러리를 빌드 할 때 사용됩니다. 이 파일은 libfred_la_LIBADD =과 같이 지정됩니다. libtool 라이브러리 또는 시스템 라이브러리를 지정하는 데 사용할 수 있으며이 라이브러리를 결과 libtool .la에 라이브러리에 배치합니다. 따라서 라이브러리에 링크하면 모든 적절한 라이브러리를 가져올 수 있습니다.

링크 할 라이브러리 만 지정해야합니다. 예를 들어, 내 라이브러리 libfred.la은 수학 루틴에 따라 달라집니다 (예 : libm). 나는 도서관에 대한 추가 라이브러리를를 지정하고있어, 내가 주 :

libfred_la_LIBADD = -lm 

이 종속성은 내가 라이브러리를 빌드 할 때 인코딩,뿐만 아니라 도서관의 소비자에게 전달됩니다.

엄지 손가락의 규칙은 : 프로그램 에 추가되는 것들에 대한 라이브러리

  • LDADD에 추가되고있는 것들에 대한

    • LIBADD