2016-10-25 7 views
0

가 나는 autotools를 + libtool이 프로젝트에서 모듈을 만드는 오전 : 이제libtool : 내 모듈의 경로는 무엇입니까?

#the module:              
lib_LTLIBRARIES = mmmm.la           
mmmm_la_SOURCES = mmmm.c         
mmmm_la_LDFLAGS = $(AM_LDFLAGS) -module -shared 

을 다음과 같이 Makefile.am 보이는, 내 모듈에 대한 C 테스트를 작성하고자합니다.

내 C 테스트에 dlopen() 또는 lt_dlopen()에 제공해야합니다 어떤 경로? 내 모듈의 상대적 위치를

(시험에 비해 (.so 또는 .la .XX입니다) 시험은 공유 객체 mmmm.xx로드를 개시한다 이 프로그램은)

내가 시험 Makefile.am에 전달 된 -dlopen 옵션이를 찾을 수 autotools를 도움이 될 것으로 기대 lt_dlopen()로 시도 ... 내가 체크, 트리 메이크업 검사, 또는 메이크 installcheck의 부족을 할 수 있는지 여부에 따라 다릅니다 lib : lt_dlopen()이 호출되면 도움이되지 않습니다. lt_dlopen()은 실제로 .la 파일을 열 수 있지만 여전히 wher에게 알려야합니다.

#the module test (tests are also installed, hence the "test" prefix) 
test_PROGRAMS = tttt 
tttt_SOURCES = tttt.c 
tttt_LDADD = "-dlopen" mmmm.la 
tttt_DEPENDENCIES = mmmm.la 

모든 좋은 힌트 : 전자이 파일은 ltdl lib 디렉토리에 테스트 할 때

내 테스트 메이크은 다음과 같습니다 (아마도 .libs 디렉토리를 ommiting)의 매력에 빠져?

답변

0

당신이 처리 할 수있는 한 가지 방법은 LD_LIBRARY_PATH env 변수를 라이브러리를 설치할 위치로 설정하는 것입니다.

그러나 테스트에 필요하기 때문에 configure.ac에서 config.h으로 변수를 내 보냅니다. 따라서 config.h을 포함하는 모든 파일은 dlopen의 경로를 설정하는 데 사용할 수있는 #define your_variable이됩니다.

+0

흠. 두 솔루션 모두 해킹 소리처럼 들립니다. libtool과 autotools를 사용하여 가능한 한 OS를 추상화하는 것이 아이디어입니다. * .so 파일 이름이나 LD_LIBRARY_PATH를 하드 코딩하면 결국 우리는 지원하고자하는 OS의 작은 부분을 가정하게됩니다. (분명히 리눅스를 코딩합니다!). 그러나 이것이 유일한 (나쁜) 해결책 일 수 있습니다. 나는 그것이 작동한다고 추측하므로 대답을 받아 들일 것입니다. 그리고 당신은 시도를위한 약간의 신용이 필요합니다 :-) ... 완전히 만족하지는 않습니다 ... – user1159290