Ho un'applicazione suddivisa in diverse librerie ai fini del riutilizzo del codice. Su Windows tutto ciò che devo fare è mettere i file .dll nello stesso percorso dell'eseguibile e li trova automaticamente. Su Linux (poiché codifica i percorsi verso le cose) devo specificare la variabile ambientale LD_LIBRARY_PATH
o precaricare le librerie prima dell'eseguibile.Percorso libreria condivisa come directory eseguibile
Ho visto alcune cose sull'incorporare il percorso usando l'opzione linker di -Wl,-rpath=<PATH>
e l'ho provato usando il percorso .
. Ma guarda solo nella directory di lavoro corrente, non nella directory dell'eseguibile.
C'è un modo per specificare nel linker di cercare nella directory dell'eseguibile per le librerie condivise per impostazione predefinita (come su Windows)?
Grazie! Matt
Quando si utilizza $ ORIGIN, è necessario assicurarsi che $ sia correttamente quotato in modo che il linker lo veda effettivamente. Dalla riga di comando, si desidera "-rpath \ $ ORIGIN" e da un Makefile si desidera "-rpath \ $$ ORIGIN" –
Sto usando Eclipse e CDT e sto inserendo l'opzione sotto i flag di linker vari. Sto mettendo '-Wl, -rpath = $$ ORIGIN' e nella finestra di output lo mostra con un singolo $. Ma non sembra funzionare. Ho provato diverse varianti, ma non succede nulla. È come se il linker ignorasse semplicemente la bandiera. Ho provato: -Wl, -rpath = $ ORIGIN -Wl, - rpath = $ ORIGIN -Wl, -rpath =/$ ORIGIN -Wl, -rpath = $ ORIGIN/ -Wl, -rpath =/$ ORIGIN/ ecc. – CuppM
Usa elfdump o l'equivalente locale per vedere cosa c'è dentro? Usa ldd e vedi cosa dice? – bmargulies