Diciamo che ho una libreria (A)
che implementa il modello singleton (ha una variabile statica nella sua implementazione).Cosa succede alle variabili statiche quando le librerie sono collegate staticamente
(A)
la libreria è compilata come libreria statica.
Ora, diciamo che ho nel mio probject:
(B)
, un'altra libreria statica che collega in modo statico con(A)
.(C)
, un'altra libreria statica che collega staticamente con(A)
.(D)
, un programma di livello superiore che collega con(B)
e(C)
.
Alla fine, il mio singleton è davvero un singleton (e la mia variabile veramente statica)? Sono (B)
e (C)
se si trova la stessa variabile statica da (A)
(è unica)? Oppure il fatto che (A)
sia stato collegato staticamente due volte il codice (A)
incorporato due volte terminando con la mia variabile statica da (A)
che appare due volte nel codice binario finale? Quindi se (B)
modifica il valore della variabile statica, (C)
non vedrebbe la modifica?
Nota: l'ho sperimentato quando modifica le librerie del progetto da collegare in modo statico anziché dinamico. Mi sto solo chiedendo se ho fatto qualcosa di sbagliato, o se si tratta di un normale comportamento noto.
Una libreria statica è fondamentalmente solo un archivio di file oggetto, che viene collegato al file di output come qualsiasi altro file oggetto. –
(D) dovrebbe essere collegato a (A) anche se richiede simboli da (A). (B) e (C) non contengono codice (A). Sarebbe diverso se (B) e (C) fossero dlls/sos. –
I tuoi primi due passaggi non hanno senso. Le librerie statiche sono raccolte di moduli di codice oggetto; non sono "collegati" ad altre librerie statiche. Sono semplicemente "lì". Quando costruisco (D), non vedo come il solo collegamento (B) e (C) si tradurrà in una produzione finale. Quando si inserisce una lib statica che richiede un'altra lib statica, è responsabilità del puller (il collegamento dell'eseguibile) compilare gli spazi vuoti (in questo caso, anche il collegamento in (A)), che dovrebbe dirvi qualcosa su quanti (A) sono nella tua produzione finale. – WhozCraig