정적 라이브러리 L을 생성하는 프로젝트가 있습니다. L의 일부 기능은 일부 플러 거스 M을로드 할 수 있습니다 (dlopen("libmmmm.so")
: M은 공유 라이브러리 (모듈) 임). .autotoos/libtool에서 적절한 플러그인 (모듈) 처리
L의 module_load()
함수를 테스트하는 테스트 T는 T + L에서의로드를 테스트하기 위해 L 테스트의 주요 테스트 T (L은 통계적으로 링크 됨)와 플러그 인 M으로 구성됩니다.
테스트는 설치의 일부입니다 (testdir이 정의되어 있음).
#the test program linked with the static lib L:
#(the tests are distributed as well, hence the test_* prefix)
test_PROGRAMS = tttt
tttt_SOURCES = tttt.c
tttt_LDADD = llll.la
#the module to be loaded by the T+L test:
lib_LTLIBRARIES = libmmmm.la
libmmmm_la_SOURCES = mmmm.c
libmmmm_la_LDFLAGS = $(AM_LDFLAGS) -module -shared
문제는 모듈을 찾을 수있는 경로에 관한됩니다
: 테스트 작업을 (즉, libmmmm
여기에 테스트 T의 디렉토리에있는 Makefile.am (건물 모두 T와 M)을 다음과 .so가 있습니다) 확인을 위해. 하지만 out of tree (VPATH) 빌드 (공유 라이브러리를 찾을 수 없음)에 실패합니다.
그래서 질문 : 어떻게 작동합니까? libtool이는, 내 생각, dlopen()
으로 *.la
래퍼를 결코 이해하지 못할 것입니다 LD_LIBRARY_PATH 같은 것을 ... 설정하는
그래서합니까 이것은 그래서 나무에서, 즉 확인을 항상 작동 내가 고칠 수있는 방법은 무엇 build, distcheck ... .libs
디렉토리에 대한 검색 경로를 하드 코딩하는 것은 매우 휴대 가능하다고 느끼지 않습니다. 우리는 여러 플랫폼을 대상으로하기 때문에 autotools를 사용합니다.
PS : 나는 때문에 당신은 그것을 돌봐 libltdl
를 사용할 수있는 "-module"옵션
@ Diego의 조언은 갈 길이 멀다. 소프트웨어가'libtool'로 빌드되면'libltdl'은 GPL에 의해 방해받지 않습니다. 이식성이 있으며 특정 플랫폼에서 제공하지 않으면 기능을 에뮬레이트합니다. 모듈은 [automake'] (http://www.gnu.org/software/automake/manual/automake.html#Libtool-Modules) 매뉴얼에서 간략하게 언급됩니다. 'automake'와'libltdl'에 대한 더 자세한 개요는 ['libtool'] (http://www.gnu.org/software/libtool/manual/libtool.html#Using-libltdl) 매뉴얼에 있습니다. –