2014-06-06 2 views
1

다른 기본 라이브러리로 개발중인 라이브러리에서 링크 할 수 있는지 확인하기 위해 autoconf 검사를 작성하려고합니다. 내 점검 :LDFLAGS를 autoconf 테스트 (AC_LINK_IFELSE)에 전달할 수 없습니다.

AC_SUBST([LIBS],["${LIBS} -lMyLib"]) 
AC_LINK_IFELSE(
    [AC_LANG_PROGRAM([#include <mylib/library.hpp>], 
    [testFunction()])], 
    [AC_DEFINE([HAVE_MYLIB],[1],[Do we have libMyLib?])], 
    [AC_MSG_ERROR([Please install libMyLib before trying to build libMyLibJNI.])]) 

libMyLib이 일부 표준 위치에 설치된 경우에는 정상적으로 작동합니다.

$ LDFLAGS="${PWD}/../target/cpp/lib" ./configure --prefix="${PWD}/../target/cpp" 
checking for a BSD-compatible install... /usr/bin/install -c 
checking whether build environment is sane... yes 
checking for a thread-safe mkdir -p... /bin/mkdir -p 
... 
configure: error: Please install libMyLib before trying to build libMyLibJNI. 

어떻게 내가 내 LDFLAGS 테스트를 구성을 전달하지 : 내가 libMyLib을 구축하고 표준이 아닌 디렉토리에 설치하는 경우 난 내 구성 스크립트에 LDFLAGS를 통과하더라도,이 검사는 실패?

+1

일반적으로 LDFLAGS에'-L'을 포함시켜야합니다 : LDFLAGS = -L/p/a/t/h –

답변

0

당신은 옵션을 경로가 아닌 LDFLAGS으로 전달해야합니다. 나는 또한 오히려 환경으로보다 ./configure에 변수를 전달하는 것이 좋습니다 : 검색 경로가 정확하게 하나의 변수에 전달 될 수있는 당신이 너무 LIBS에 전달할 수

$ ./configure --prefix="${PWD}/../target/cpp" LDFLAGS="-L${PWD}/../target/cpp/lib" 

을 다른 방법으로 (두 변수는와 동일 링커 명령 줄에서 전달되는 위치를 제외하고는 검색 경로의 경우 위치가 괜찮습니다.

또한 수표에 적어도 하나의 실수가 있습니다. AC_SUBST을 그렇게 사용해서는 안되며 LIBS="${LIBS} -lMyLib으로 설정하면됩니다 (대체는 항상 발생합니다). 그러나 헤더를 포함하지 않고 함수를 검사 할 수있는 경우에는 AC_CHECK_LIB을 사용해야합니다.

+0

Ooops, 오타입니다. 고맙습니다. AC_CHECK_LIB 사용 : 나는 그 매크로를 사용할 때 config.hpp에 HAVE_MYLIB를 설정할 수 없었습니다. 그래서 AC_LINK_IF_ELSE를 사용하게되었습니다. – roirodriguez

+0

동작을 덮어 쓰지 않으면 (찾을 수없는 경우) 'AC_CHECK_LIB'를 사용할 때'config.h' (또는'config.hpp')에'HAVE_LIBMYLIB'가 있어야합니다. –