Para a vinculação estática, ld
não fará o trabalho de pesquisa automática de dependências para wget
, como faz magicamente para objetos compartilhados. Alguns scripts tentam fazer essa lista para você, outros não. Você atingiu o último caso.
Você precisa criar a lista de bibliotecas e suas dependências por conta própria.
Se você ainda não sabe qual é a lista completa de deps para seu binário wget
estático, primeiro é necessário criá-lo como normal (compartilhado) e, em seguida, obter essa lista com ldd /path/to/wget
, onde /path/to/wget
é o seu binário construído do wget (ele pode ser encontrado dentro da árvore fonte, geralmente algo como src/wget
)
Você precisará obter todas as versões estáticas das bibliotecas compartilhadas. Eles geralmente estão contidos nos pacotes -dev ou devel que sua distribuição fornece.
Cada biblioteca na lista deve ser reorganizada ou anexada duas ou mais vezes, porque ld
não tenta pesquisar todos os arquivos estáticos em busca de símbolos e erros específicos. Então, o seu libgnutls.a provavelmente depende do libtasn1.a para os símbolos asn1_ *. Então você precisa anexar isto à linha de comando: -lgnutls -ltasn1
. Se mais uma biblioteca depender do libtasn1.a, você precisará anexá-la novamente à linha de comando do link.
Os símbolos indefinidos podem ser resolvidos procurando na lista de símbolos da biblioteca estática com nm /usr/lib/lib.a
. Ou encontrar essa biblioteca em determinado diretório com fgrep -l symbol_name /usr/lib/*.a
. Observe que essa pesquisa (com fgrep) mostrará as duas bibliotecas que exigem e fornecem esse símbolo, portanto, é apenas um teste rápido.
As bibliotecas podem ser anexadas com LIBS=
variable a configure
script: LIBS="-lgnutls -ltasn1"
.