星期三, 9月 05, 2018

[C] patchelf 用法


先寫一個簡單的share library, (CODE)
簡單的function可以印出字,
之後寫binary來call這個function,(CODE)

會build出來main這個binary,
這時如果直接執行就會出現找不到libhello.so檔,

vodka@sw2-server:~/test/c_code/Patchelf$ ./main
 ./main: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory

所以我需要指定“LD_LIBRARY_PATH”給他,讓他知道library的位置,

vodka@sw2-server:~/test/c_code/Patchelf$ LD_LIBRARY_PATH=/home/vodka/test/c_code/Patchelf ./main
hello: From main


但如果每次都要這樣執行就太麻煩了,
可以使用"ldconfig"來把library位置加入系統找尋的位置裡,
但是這樣就要動到系統,
所以這時可以用“patchelf”的方式來修改binary內找尋library的位置。

patchelf --set-rpath "library_path" $OBJ

指定library path後,以後就可以直接執行binary就可以。



github code

Ref:
ref_1






 

沒有留言: