As dependências da Biblioteca estática aninhada são possíveis?

11

Eu estou trabalhando no QT.

  1. Uma biblioteca estática pode depender de outra biblioteca estática? (A Static Lib é criada vinculando outra estática)
  2. Se sim, é possível que, depois de vincular à lib2, a lib gerada (lib1) não contenha todos os códigos da lib2?

No meu projeto Qt, estou usando uma biblioteca estática, que depende de várias bibliotecas. Eu tive que adicionar todas as bibliotecas (com todos os cabeçalhos no meu projeto), embora eu precise apenas de uma lib (e uma .h dessa classe) no meu código.

Por favor, explique o cenário.

sk patra
fonte

Respostas:

6

Quando você declara algo, apenas promete que, durante a vinculação, estará disponível e identificado de forma exclusiva. As bibliotecas estáticas nada mais são do que contêineres para definições em um formato que está fora do padrão. Portanto, isso tem as seguintes implicações:

1) Eu não bastante obter o que você está pedindo aqui, mas uma biblioteca estática pode depender muito de outra biblioteca estática. Você promete que as definições dessa biblioteca estejam disponíveis durante o estágio final de vinculação do seu executável (fornecendo-o como dependência de link). Ou você o "mescla" durante a vinculação da lib estática.

2) A resposta para isso torna-se que a única coisa que você precisa fazer é simplesmente não vincular a lib2 durante a vinculação da lib1.

Em geral, a melhor abordagem na minha experiência é mesclar apenas bibliotecas privadas, a razão é que, caso contrário, os clientes terão violações de símbolos definidos multiplamente quando outras partes do projeto compartilharem dependências com você.

Ylisar
fonte
Isso significa que uma lib estática que depende de outra lib estática, mas contém as informações de vinculação dessa lib, é POSSÍVEL. Isso significa que quando preciso incluir a primeira lib no meu projeto, devo incluir a segunda também. Bcoz, a primeira lib não contém códigos inteiros da segunda lib. Estou certo?
Skatra
6

Meus rápidos dois bits sobre isso: 10 (desculpe piada terrível).

Para expandir um pouco, aqui vai:

1 - Uma biblioteca estática pode depender de outra biblioteca estática, nada ou mesmo uma biblioteca dinâmica: nas duas primeiras instâncias, todo o código da nova biblioteca estática seria incorporado na nova SLL (Static Link Library), no entanto, a terceira opção , dependendo do ambiente, o SLL pode ter um dos seguintes resultados,

  • conteria versões estáticas do código exigido por ele coletado da DLL (Dynamic Link Library)
  • ou, muito mais horrivelmente, você teria uma biblioteca estática que, quando incluída em um projeto, causaria o requisito de remessa com uma DLL, interrompendo todo o ponto de vinculação estática.

Então, resumindo, você pode vincular uma biblioteca estática a uma biblioteca estática

2- se a lib1 e a lib2 forem estáticas e a lib1 tiver sido vinculada à lib2, toda a funcionalidade da lib2 estará disponível na lib1 sem a necessidade de incluir a lib2, pois a lib2 estaria estaticamente vinculada à lib1 (pense em bonecas russas, com lib2 sendo o menor).

No cenário que você descreve, deve haver uma funcionalidade discreta disponível em cada um dos arquivos que você precisa incluir, que não está vinculado estaticamente, daí a necessidade de vários arquivos; caso contrário, você teria um único arquivo a incluir e ficaria bem.

Faça o seguinte: Um arquivo .h com referências a 6 bibliotecas vinculadas estaticamente: você precisará incluir 7 arquivos no seu projeto para obter a funcionalidade completa

exemplo de inclusão 1

Um SLL que foi criado a partir do referido arquivo .h exigiria que apenas o novo SLL fosse incluído para vinculação na compilação:

exemplo de inclusão 2

Espero que isso ajude e que eu tenha entendido o que você estava perguntando.

GMasucci
fonte