Perché è che alcune librerie statiche (lib * .a) possono essere collegati allo stesso modo che le librerie condivise (lib * .so) sono collegati (ld -l interruttore), ma alcuni non possono?modo corretto di collegare una libreria statica utilizzando GCC
avevo sempre stato insegnato che tutte le librerie statiche, o meno, possono essere collegati con -l ... però ho incontrato una libreria finora (GLFW), che non fa altro che vomitare "undefined reference" collegare gli errori se provo a collegarlo in questo modo.
In base alla risposta su this question, il modo "corretto" per collegare le librerie statiche è includerle direttamente, insieme ai miei file oggetto, piuttosto che usare -l. E, nel caso della biblioteca GLFW, questo risolve certamente il problema. Ma ogni altra libreria statica che sto usando funziona bene quando è collegata a -l.
Quindi:
- Che cosa ha potuto causare questo una libreria a non funzionare quando è legato piuttosto che direttamente incluso? Se conoscessi la causa, forse potrei modificare e ricompilare la libreria per risolvere il problema.
- È vero che non si suppone che si colleghino librerie statiche nello stesso modo in cui si collegano le librerie condivise? (E se no, perché no?)
- È il linker ancora in grado di eliminare le funzioni di libreria non utilizzate dal l'eseguibile di uscita quando la libreria è direttamente incluso in questo modo?
Sì, i percorsi per ogni libreria vengono forniti utilizzando -L, prima del flag -l corrispondente. GCC può trovare la libreria, ma fornisce un numero elevato di errori di riferimento non definiti all'interno della libreria. – Nairou