Desidero modificare il percorso di un file eseguibile utilizzando install_name_tool
, ma non riesco a capire quale sia il percorso in questo momento. install_name_tool
richiede sia il vecchio che il nuovo percorso da fornire sulla riga di comando. Quale comando posso usare per stampare il percorso di un eseguibile sotto OSX?Stampa percorso dell'eseguibile su OSX
risposta
Prima di tutto, capire che un file eseguibile non contiene una singola voce rpath
, ma una matrice di una o più voci.
In secondo luogo, è possibile utilizzare otool
per elencare le voci di rpath
di un'immagine. Utilizzando otool -l
, si otterrà in uscita come il seguente, proprio alla fine della quale sono i rpath
voci:
Load command 34
cmd LC_LOAD_DYLIB
cmdsize 88
name /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (offset 24)
time stamp 2 Wed Dec 31 19:00:02 1969
current version 1038.32.0
compatibility version 45.0.0
Load command 35
cmd LC_RPATH
cmdsize 40
path @loader_path/../Frameworks (offset 12)
Cerca gli comandi LC_RPATH
e annotare il percorso sotto la voce path
.
Attualmente sto scrivendo diversi script Bash-3 per la lavorazione dyld e questo risponde alla domanda, in modo da inviare per riferimenti:
#! /bin/bash
# ######################################################################### #
if [ ${#} -eq 0 ]
then
echo "
Usage: ${0##*/} FILE...
List rpaths in FILEs
"
exit 0
fi
# ######################################################################### #
shopt -s extglob
# ######################################################################### #
for file in "${@}"
do
if [ ! -r "${file}" ]
then
echo "${file}: no such file" 1>&2
continue
fi
if ! [[ "$(/usr/bin/file "${file}")" =~ ^${file}:\ *Mach-O\ .*$ ]]
then
echo "${file}: is not an object file" 1>&2
continue
fi
if [ ${#} -gt 1 ]
then
echo "${file}:"
fi
IFS_save="${IFS}"
IFS=$'\n'
_next_path_is_rpath=
while read line
do
case "${line}" in
*(\)cmd\ LC_RPATH)
_next_path_is_rpath=yes
;;
*(\)path\ *\ \(offset\ +([0-9])\))
if [ -z "${_next_path_is_rpath}" ]
then
continue
fi
line="${line#* path }"
line="${line% (offset *}"
if [ ${#} -gt 1 ]
then
line=$'\t'"${line}"
fi
echo "${line}"
_next_path_is_rpath=
;;
esac
done < <(/usr/bin/otool -l "${file}")
IFS="${IFS_save}"
done
# ######################################################################### #
'Speranza che aiuta ;-)
NB : Qualcuno sa qualche trucco di Bash-3 che può essere utile per questo script?
mi basta usare il comando otool
otool -L <my executable>
Esso stampa il campo rPath. Non c'è bisogno di script lunghi.
Questo stamperà i percorsi delle librerie condivise utilizzate.Questi percorsi possono usare @rpath tuttavia 'otool -L' non non, nelle librerie che ho testato, includo la voce LC_RPATH della stessa – Baggers
Per quanto ne so il primo percorso in otool -L è il percorso, come stampato da otool -D –
Ho scoperto che posso stampare il nome di installazione di una libreria condivisa su osx utilizzando otool -D.
Inoltre, è possibile impostare il nome installare direttamente senza riferimento al vecchio nome di installazione passando la bandiera -id a install_name_tool: install_name_tool -id "@ rpath/mio/percorso mylib
- 1. Stampa Firemonkey su Mac OSX
- 2. Stampa percorso classe bundle OSGI?
- 3. Installazione Typesafe attivatore su OSX
- 4. Percorso Java 7 in mac osx
- 5. Installazione GLFW su OSX
- 6. Rubygems su OSX mancante
- 7. mancante libgeos_c.so su OSX
- 8. Aggiornamento GCC su OSX
- 9. Problema comando su OSX
- 10. Utilizzando PyDev con Eclipse su OSX
- 11. ottava su OSX Yosemite, output di stampa doc, ma il grafico è nero pieno
- 12. Simulatore iOS 6.1 su OSX 10.10 Yosemite
- 13. Mac OSX PHP e XAMPP problema di percorso
- 14. Stampa su un file o stampa su shell in Perl
- 15. Utilizzo di make su OSX
- 16. Installazione BeautifulSoup su Mac OSX
- 17. Maven ignora JAVA_HOME su OSX?
- 18. Installare autoreconf su OSX lion?
- 19. Installazione HAXM su OSX Yosemite
- 20. Come installare pycairo su osx?
- 21. WickedPDF non inviato su osx
- 22. Come ls --ignore su OSX
- 23. Come posso modificare $ PATH (.bash_profile) su OSX?
- 24. Ruby su Mac OSX tramite porte Mac
- 25. Domanda per principianti: GTK # (Mono) su OSX
- 26. comandi shell di moduli nodo non nel percorso su Mac OSX
- 27. installazione PhoneGap con NPM 1.3.11 crea una password: percorso di directory su Mac OSX
- 28. Impostazione OpenCV in QT su OSX
- 29. Mono su OSX: impossibile trovare gtksharpglue-2.dll
- 30. wkhtmltopdf non riesce a percorso di stampa SVG (highchart)
Qual è il' @ loader_path'? – nn0p
@ nn0p Ho trovato [questo articolo] (https://wincent.com/wiki/@executable_path,[email protected][email protected]) utile per capire loader_path. –
Non riuscivo a vedere un LC_RPATH nel mio otool - l output, ma vedo il nome di installazione sotto il campo name che segue la voce cmd LC_ID_DYLIB –