'de yürütülebilir dosyanın rpath'ini bastirin install_name_tool
'u kullanarak bir yürütülebilir dosyanın rpathini degistirmek istiyorum, ancak rpathin simdi ne oldugunu anlayamıyorum. install_name_tool
, hem eski hem de yeni rpath komutlarının komut satırında verilmesini gerektirir. OSX altında bir yürütülebilir dosyanın rpath'ini yazdırmak için hangi komutu kullanabilirim?OSX
OSX
cevap
Her şeyden önce, bir yürütülebilir dosyanın tek bir rpath
girişini içermediğini, ancak bir veya daha fazla giriş dizisi olduğunu anlayın.
İkincisi, bir resmin rpath
girişlerini listelemek için otool
kullanabilirsiniz. otool -l
kullanarak, hangi rpath
girişleri olan en sonunda, aşağıdaki gibi çıktıyı alırsınız: LC_RPATH
komutlar için
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)
Bak ve path
giriş altında yolunu not edin.
Şu anda DYLD işlenmesi için çeşitli Bash-3 komut yazıyorum ve bu bir soru cevaplar, bu yüzden başvuru için post it:
#! /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
# ######################################################################### #
'o ;-)
NB yardımcı olur umarım : Bu betik için yararlı olabilecek bazı Bash-3 hileleri var mı?
Sadece otool komutunu
otool -L <my executable>
O rpath alanını yazdırır kullanın. Uzun senaryolara gerek yok.
Bu, kullanılan paylaşılan kitaplıkların yollarını yazdıracaktır. değil, test ettiğim lib'lerde, lib'in kendi LC_RPATH girişini dahil – Baggers
Otoolda ilk yolu söyleyebildiğim kadarıyla -L otoyol -D tarafından basıldığı gibi rpath –
Paylaşılan kitaplığın yükleme adını otool-D kullanarak osx'te yazdırabildiğimi buldum.
Üstelik ben install_name_tool için -id bayrağı geçirerek eski yüklemek adına referans olmadan doğrudan yüklemek adını ayarlayabilirsiniz: install_name_tool @ rpath/my/yol MyLib nedir
- 1. OSX
- 2. OSX
- 3. OSX
- 4. OSX
- 5. OSX
- 6. BB'de OSX
- 7. Mac OSX
- 8. Eğer OSX
- 9. GLFW OSX
- 10. Mac OSX
- 11. P4merge'ı OSX
- 12. LLVM: OSX
- 13. , OSX Mavericks
- 14. OSX su komut sorunu
- 15. Komutu Uyku Ekranı OSX
- 16. Database.yml dosyasının çalışması, OSX
- 17. OSX ve iOS
- 18. Mac OSX 10.5
- 19. nasıl OSX 10.8
- 20. Kakao: çalıştırmak OSX
- 21. Bitbucket: Mac OSX
- 22. OSX USB Denetimi
- 23. Eclipse Segfault (OSX)
- 24. OpenCV 2.1 Mac OSX
- 25. OSX eşdeğer IP_RECVERR
- 26. ffmpeg ekran kaydı, OSX
- 27. OSX Segmentasyon Hata 11 Android
- 28. Yaratma KSS, özel anahtar osx
- 29. Tomcat, Netbeans Mac OSX Lion
- 30. OSX Terminali - Uygulamayı Değiştir Odaklanma
" -ID' @ loader_path'? – nn0p
@ nn0p [this article] (https://wincent.com/wiki/@executable_path,[email protected][email protected]) loader_path'i anlamada yardımcı oldum –
Otoolumda bir LC_RPATH göremedim - l çıktı, ancak LC_ID_DYLIB cmd girişini izleyen ad alanı altındaki yükleme adını görüyorum –