Il morpe bloggoso

…un mondo stupido, pieno zeppo di errori di grammatica!

otool e install_name_tool per modificare un binario

January 10th, 2016

Passando da mavericks a el capitan, un paio di app non proprio recenti hanno smesso di funzionare, leggendo nei log noto che alcune lib non esistono o non sono compatibili perché aggiornate, in questo caso si puoi provare a rimpiazzare ls libreria.

Cercando in rete ho trovato una piccola guida per modificare nel binario la posizione delle librerie, è linkata ala fine del post.

per fare questo servono i command line tools di xcode, dal link si possono scaricare liberamente e installare (https://developer.apple.com/downloads/)

questo post non prende in considerazione una app in particolare, è solo un promemoria, una mini guida.

nonParte.app serve qualcosa.6.0.9.dylyb da mavericks ma non posso certo sostituire quella nuova con questa vecchia in /usr/lib, quindi apro il pacchetto di nonParte.app e nella cartella /Contents/MacOs copio qualcosa.6.0.9.dylyb

apro il terminale, e uso otool per sapere che librerie usa e i relativi path e nomi

$ otool -L nonParte.app/Contents/MacOs/nonParte

otool mostra una lista di path, trovo la libreria che mi interessa e verifico il path fisicamente in alcuni casi nel eseguibile il riferimento punta a un symbolic link, tipo:

/usr/lib/qualcosa.6.dylyb -> /usr/lib/qualcosa.6.0.9.dylyb

in questo caso conviene fare dentro il pacchetto nonParte.app
un symbolic link con lo stesso nome che troviamo in /usr/lib altrimenti va aggiunta una libreria al binario… ma forse è meno rischioso fare solo il change

il comando per modificare la posizione della libreria nel binario:

$ sudo install_name_tool -change /path/vecchia/lib /path/nuova/lib /path/file/eseguibile

esempio per nonParte.app:

sudo install_name_tool -change /usr/lib/qualcosa.6.dylib /Applications/nonParte.app/Contents/MacOS/qualcosa.6.dylib /Applications/nonParte.app/Contents/MacOS/nonParte

se tutto va bene ridiamo $ otool -L nonParte.app/Contents/MacOs/nonParte e verifichiamo che nella lista il path della nostra libreria sia cambiato, e se tutto è come dovrebbe essere la nostra app dovrebbe avviarsi.

fonti: http://thecourtsofchaos.com/2013/09/16/how-to-copy-and-relink-binaries-on-osx/