Qual è la differenza tra -rpath e -L?

gcc e ld forniscono molti modi per specificare un percorso di ricerca per le librerie, tra cui i -rpath e -L . Le manpage non rivelano differenze tra questi due flag, dicendo in pratica che ogni flag aggiunge una libreria al percorso di ricerca della libreria. Tuttavia sembra strano che entrambe le bandiere facciano esattamente la stessa cosa. Quali sono le differenze, se esistono, tra queste due opzioni?

Devi leggere alcune copie obsolete delle manpage (enfasi aggiunta):

-rpath = dir
Aggiungi una directory al percorso di ricerca della libreria di runtime . Questo è usato
quando si collega un eseguibile ELF con oggetti condivisi. Tutto-percorso
gli argomenti sono concatenati e passati al linker di runtime , che
li usa per localizzare oggetti condivisi in fase di runtime.

vs.

-L searchdir
–library-path = searchdir
Aggiungi percorso searchdir all’elenco dei percorsi che ld cercherà
librerie di archivi e script di controllo ld.

Quindi, -L dice a ld dove cercare le librerie a cui collegarsi durante il collegamento. Si utilizza questo (ad esempio) quando si sta costruendo contro le librerie nella struttura di build, che verrà inserita nei normali percorsi della libreria di sistema facendo make install . --rpath , d’altra parte, memorizza quel percorso all’interno dell’eseguibile, in modo che il linker dinamico di runtime possa trovare le librerie. Lo usi quando le tue librerie si trovano al di fuori del percorso di ricerca della libreria di sistema.