動機
很多時候會需要把一些trace或是測試的程式放到舊平台或是其他平台運行 所以記一下遇過的坑
坑: shared object
就是在/usr/lib的so
第一個情境是怎麼找需要的so?
用ldd
第二個是如果他需要的版本比較舊的話? 用symbol link,但是要注意不要動到重要的so, 像c的runtime(libc)
第三個是so放哪?
一個是/usr/lib
不然就是用LD_LIBRARY_PATH
像這樣
LD_LIBRARY_PATH="/path/you/want1:/path/you/want/2" ./a.out
坑: compile
如果真的只能compile,要注意當時的環境 最好用當時compiler的版本
通常用新compiler去編舊程式都會報錯 大多時候都是像type對不起來的問題 但處理起來很煩
寫在後面
順便記一下好用的trace工具
- strace: 追userspace程式的system call
- pstack: 追call stack
- systemtap: 追kernel的function call