動機

很多時候會需要把一些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工具

  1. strace: 追userspace程式的system call
  2. pstack: 追call stack
  3. systemtap: 追kernel的function call

Ref

good chinese linux tool refbook