Fifth Browser - como faço para que o script configure reconheça uma dependência?

0

Estou tentando instalar o Fifth Browser ( site ) ( link do github ) no Xubuntu 16.04.2 LTS.

Consegui obter todas as dependências através dos repositórios oficiais da distribuição, usando o Synaptic para instalação. Um deles listado na página inicial do quinto é chamado liburlmatch ( link do github ). Parece ser uma biblioteca simples que permite bloquear URLs ao usar curingas.

Eu instalei o urlmatch via:
/ git clone link e depois / sudo checkinstall em uma pasta separada. Isso pareceu funcionar perfeitamente.

Quando eu faço ./configure na quinta pasta, as últimas linhas ficam assim:

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

Você pode encontrar a parte do arquivo configure referente ao urlmatch na seguinte pasta para sua conveniência: codeblock do configure para liburlmatch .

O que estou fazendo de errado? Por que o script de configuração não reconhece a biblioteca urlmatcher? Por favor, considere em sua resposta que esta é uma das minhas primeiras tentativas de compilar um programa como este, obrigado.

    
por Enteneller 25.06.2017 / 16:30

1 resposta

1

Parece que a questão é, na verdade, a de como o script de configuração para o quinto-5.0 constrói e executa o conftest para a biblioteca de urlmatch.

Primeiro, o erro

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

acaba por ser um pouco enganador: se olharmos para o config.log , vemos que o conftest está realmente a falhar devido a uma referência indefinida à função 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

Isso porque uncompress está em libz - que está sendo vinculado antes liburlmatch :

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

falha ao respeitar a ordem de link necessária 1 para as duas bibliotecas. Podemos rastrear isso de volta ao arquivo configure.ac a partir do qual o script configure teria sido gerado:

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

i.e. em vez de ser adicionado à lista de LIBS , -lz é adicionado ao LDFLAGS (que é mais comumente usado para especificar caminhos adicionais da biblioteca à frente do LIBS ).

Uma solução alternativa rápida é chamar ./configure com um argumento LIBS explícito:

./configure "LIBS=-lz"

Isso faz com que um -lz extra seja colocado na linha de comando g++ depois da biblioteca urlmatch (na cabeça do outro LIBS ):

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

Uma solução mais permanente pode ser modificar o arquivo configure.ac para adicionar -lz a LIBS em vez de LDFLAGS e, em seguida, gerar novamenteconfigure usando autoconf (ou autoreconf se necessário ).

Refs.:

  1. Por que a ordem da opção '-l' no gcc é importante?
por 26.06.2017 / 02:29