Dizendo diretamente ao gcc para vincular uma biblioteca estaticamente

Parece estranho para mim usar -Wl,-Bstatic para informar ao gcc quais bibliotecas eu quero vincular estaticamente. Afinal, estou dizendo diretamente ao gcc todas as outras informações sobre links com bibliotecas ( -Ldir , -llibname ).

É possível dizer ao driver gcc diretamente quais bibliotecas devem ser vinculadas estaticamente?

Esclarecimento: Eu sei que se uma determinada biblioteca existir apenas em versões estáticas, ela será usada sem -Wl,-Bstatic , mas quero sugerir ao gcc que prefira a biblioteca estática. Também sei que especificar o arquivo de biblioteca diretamente seria vinculado a ele, mas prefiro manter a semântica para include bibliotecas estáticas e dinâmicas da mesma forma.

É possível, claro, usar -l: vez de -l . Por exemplo -l:libXYZ.a para vincular com libXYZ.a . Observe a lib escrita, ao contrário de -lXYZ que seria auto expandida para libXYZ .

Você pode adicionar um arquivo .a no comando de vinculação:

  gcc yourfiles /path/to/library/libLIBRARY.a 

Mas isso não está falando com o driver do gcc, mas com o ld linker como opções como o -Wl,anything é.

Quando você informar ao gcc ou ld “-Ldir -lLIBRARY”, o vinculador verificará as versões estática e dinâmica da biblioteca (você pode ver um processo com -Wl,--verbose ). Para alterar a ordem dos tipos de biblioteca verificados, você pode usar -Wl,-Bstatic e -Wl,-Bdynamic . Aqui está uma página man do gnu LD: http://linux.die.net/man/1/ld

Para vincular seu programa com lib1, lib3 dinamicamente e lib2 estaticamente, use tal chamada gcc:

 gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3 

assumindo que a configuração padrão de ld é usar bibliotecas dinâmicas (é no Linux).

Intereting Posts