다섯 번째 브라우저 - 구성 스크립트가 종속성을 인식하도록 만드는 방법은 무엇입니까?

다섯 번째 브라우저 - 구성 스크립트가 종속성을 인식하도록 만드는 방법은 무엇입니까?

다섯 번째 브라우저를 설치하려고 합니다(웹사이트) (깃허브 링크) Xubuntu 16.04.2 LTS에서.

공식 배포 저장소를 통해 모든 종속성을 얻을 수 있었고 Synaptic을 사용하여 설치할 수 있었습니다. 그들 중 하나다섯번째 홈페이지에 기재되어 있는 바와 같이liburlmatch라고 합니다(깃허브 링크). 와일드카드를 사용할 때 URL을 차단할 수 있는 간단한 라이브러리인 것 같습니다.

다음을 통해 urlmatch를 설치했습니다:
/git clone https://github.com/clbr/urlmatch.git그런 다음
별도의 폴더에 /sudo checkinstall을 설치합니다. 이것은 완벽하게 작동하는 것 같습니다.

다섯 번째 폴더에서 ./configure를 실행하면 마지막 몇 줄은 다음과 같습니다.

checking for fltk-config13... no
checking for fltk-config... fltk-config
checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found

귀하의 편의를 위해 아래 Pastebin에서 urlmatch 관련 구성 파일 섹션을 찾을 수 있습니다.liburlmatch 구성의 코드 블록.

내가 뭘 잘못했나요? 구성 스크립트가 urlmatcher 라이브러리를 인식하지 못하는 이유는 무엇입니까? 귀하의 답변에서 이러한 프로그램을 컴파일하는 것이 처음이라는 점을 고려하십시오. 감사합니다.

답변1

문제는 실제로 Fifth-5.0의 구성 스크립트가 urlmatch 라이브러리에 대한 conftest를 빌드하고 실행하는 방식과 관련이 있는 것 같습니다.

1. 오류

checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found

이는 다소 오해의 소지가 있는 것으로 드러납니다. 살펴보면 config.log함수에 대한 정의되지 않은 참조로 인해 conftest가 실제로 빌드되지 않는다는 것을 알 수 있습니다 uncompress.

configure:5511: checking for url_init in -lurlmatch
configure:5546: g++ -o conftest -g -O2 -pthread  -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -isystem /usr/include/freetype2 -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -fvisibility-inlines-hidden  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT   -lz conftest.cpp -lurlmatch    -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5
//usr/local/lib/liburlmatch.a(opti_init.o): In function `initbin':
opti_init.c:(.text+0xd6): undefined reference to `uncompress'
collect2: error: ld returned 1 exit status
configure:5552: $? = 1

그 이유는 ~ uncompress에 연결되어 있기 때문입니다.libz앞으로 liburlmatch:

. . .   -lz conftest.cpp -lurlmatch -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5

두 라이브러리 의 필수 연결 순서를 준수하지 못함1 .configure.ac 이를 스크립트를 생성한 파일 까지 더 자세히 추적할 수 있습니다 .configure

# Checks for libraries.
OLD_LDFLAGS=[$LDFLAGS]
LDFLAGS=["$LDFLAGS -lz"]
AC_CHECK_LIB([urlmatch], [url_init], [], AC_MSG_ERROR([liburlmatch not found]))
LDFLAGS=[$OLD_LDFLAGS]

LIBS즉 , 목록에 추가되는 대신 -lz에 추가됩니다 LDFLAGS(추가 라이브러리를 지정하는 데 더 일반적으로 사용됨).전에 LIBS).

빠르고 더러운 해결 방법은 ./configure명시적인 LIBS매개변수를 사용하여 호출하는 것입니다.

./configure "LIBS=-lz"

이로 인해 명령줄 -lz에 추가 콘텐츠가 배치 됩니다.g++뒤쪽에라이브러리 urlmatch(다른 의 헤드에 있음 LIBS):

. . . -lz conftest.cpp -lurlmatch -lz -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5

보다 영구적인 해결책은 대신 추가할 파일을 수정한 다음 configure.ac다시 빌드 (또는 필요한 경우)를 사용하는 것입니다.-lzLIBSLDFLAGSconfigureautoconfautoreconf


참고자료:

  1. gcc에서 "-l" 옵션의 순서가 중요한 이유는 무엇입니까?

관련 정보