Dire a gcc direttamente di colbind una libreria staticamente

Mi sembra strano usare -Wl,-Bstatic per dire a gcc quali librerie voglio colbind staticamente. Dopotutto, sto dicendo a gcc direttamente tutte le altre informazioni sul collegamento con le librerie ( -Ldir , -llibname ).

È ansible dire direttamente al driver gcc quali librerie dovrebbero essere collegate staticamente?

Chiarimento: so che se una certa libreria esiste solo in versioni statiche, la userà senza -Wl,-Bstatic , ma voglio implicare gcc per preferire la libreria statica. So anche che specificare direttamente il file della libreria si collegherebbe con esso, ma preferisco mantenere la semantica per includere le librerie statiche e dinamiche allo stesso modo.

È ansible, ovviamente, usare -l: invece di -l . Ad esempio -l:libXYZ.a per colbind con libXYZ.a . Si noti la lib scritta, al contrario di -lXYZ che si espanderebbe automaticamente in libXYZ .

È ansible aggiungere un file .a nel comando di collegamento:

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

Ma questo non sta parlando con il driver gcc, ma con ld linker come opzioni come -Wl,anything sia.

Quando comunichi a gcc o ld “-Ldir -lLIBRARY”, il linker controllerà sia le versioni statiche che dinamiche della libreria (puoi vedere un processo con -Wl,--verbose ). Per cambiare l’ordine dei tipi di libreria controllati puoi usare -Wl,-Bstatic e -Wl,-Bdynamic . Ecco una pagina man di gnu LD: http://linux.die.net/man/1/ld

Per colbind il tuo programma con lib1, lib3 in modo dinamico e lib2 staticamente, usa tale chiamata gcc:

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

partendo dal presupposto che l’impostazione di default di ld sia l’uso di librerie dinamiche (è su Linux).