In un progetto, il mio collega crea una libreria statica, ad esempio liba.a, che si collega all'app.Come posso collegare libc.a a una libreria condivisa in arm-linux uso arm-none-linux-gnueabi-gcc
In liba.a sovrascrive la libc malloc() nella versione del proprietario.
Creo una libreria condivisa libs.so che è anche collegata all'app.
Il problema è quando il mio libs.so collegato con app, la malloc() utilizzato nel mio libs.so sarà quello di liba.a, non quello in libc.so di serie, questo causa problemi.
Quindi, voglio collegamento statico libc.a al mio libs.so, ho usato flag -static -shared -fPIC per gcc.
Ma ottengo sempre arm-2012.03/bin /../ lib/gcc/arm-none-linux-gnueabi/4.6.3 /../../../../ arm-none-linux -gnueabi/bin/ld: arm-2012.03/bin /../ arm-none-linux-gnueabi/libc/usr/lib/libc.a (dl-tsd.o) (. testo + 0x14): R_ARM_TLS_LE32 non rilocazione permesso nell'oggetto condiviso.
Qualcuno ne ha idea?
Grazie in avanti.
Penso che -static -share non debba essere mischiato .... – Jeyaram
Il testo seguente è stato copiato da ld.pdf da codesurgery: "-static Non si collega alle librerie condivise Questo è significativo solo sulle piattaforme per le quali è condiviso le librerie sono supportate ** L'opzione può essere utilizzata con '-shared' **. Ciò significa che una libreria condivisa è in fase di creazione ma che tutti i riferimenti esterni della libreria devono essere risolti inserendo voci da librerie statiche ". –
@DavidChyi: Questo dice solo che -static e -shared possono essere mescolati, ma non che sia una buona idea. I compilatori in generale hanno molte opzioni che non sono una buona idea da usare per le normali applicazioni. Sono importanti per casi speciali come la compilazione di kernel, bootloader, codice microcontrollore e così via. –