2013-06-21 15 views
6

Ho difficoltà a confermare la mia comprensione di come funziona rpath-link quando si esegue la compilazione incrociata con la specifica catena di strumenti che sto usando (anche se penso che questa sia una domanda generale che si applica alla compilazione incrociata in generale).Come viene utilizzato il link di destinazione nella compilazione incrociata?

Quando prendo uno sguardo a ciò che le bandiere sono passati al compilatore e linker quando si costruisce le librerie e le applicazioni, compaiono i seguenti passati al linker:

-Wl,-rpath-link,/home/Dev/env/sys/crosscompiletoolchain/armle-v7/lib/ 

Quindi questo è un percorso di essere incorporato in comune librerie in fase di creazione per il dispositivo di destinazione sulla mia macchina di sviluppo. Questo ha senso perché dovrei fare tutto il collegamento finale sul computer di sviluppo prima della distribuzione sul dispositivo. Tuttavia, quando finalmente distribuirò sul dispositivo (cioè un'applicazione condivisa di libs +), queste librerie condivise non avranno un inutile link-rpath?

Le librerie e le applicazioni create sembrano funzionare correttamente sul target, indipendentemente dal caso, e se dovessi indovinare direi che è perché l'applicazione ha un ambiente fornito dal SO del dispositivo che ha/lib/come uno di i suoi percorsi di ricerca di libreria predefiniti (rpath-link specifica solo il primo set di directory da cercare). È corretto?

risposta

12

Check "Utilizzando LD, i linker GNU - Opzioni - GNU Archives Project" (ftp.gnu.org/pub/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html):

La differenza tra -rpath e -rpath-Link è che le directory specificate dalle opzioni -rpath sono inclusi nel l'eseguibile e utilizzato in fase di esecuzione, mentre l'opzione -rpath-link è efficace solo al momento del collegamento.

Problemi correlati