Dynamic linker on FreeBSD

,
通常在使用 Unix-like 系統的人會很習慣使用套件管理程式,比方說 port on FreeBSD, apt-get on ubuntu,它會幫你把所有有相關性的 library 都裝好,但是有些時候,你如果想要自己指定相關性的 library 的時候怎麼辦呢?

之前在使用 Hadoop 時就遇到一個例子,我想要在 90 台電腦上跑 MapReduce ,而且想要用我熟悉的 Ruby 來跑,但是這 90 台電腦我並沒有安裝軟體的權限,並且在 cloud 裡面的電腦要盡量保持乾淨,可不能因為我一個人的"好惡"就亂裝一些有的沒的,經過 rafan 大的開示,有兩條路走:

  1. 找 static linked 的 Ruby 來用
  2. 自己把 shared 的 library 一起丟上 cloud

在 FreeBSD 上有一個指令是 ldd,會列出你使用的檔案會連結到那些 .so 檔(奇怪的是在 ubuntu 上也有這個指令 ldd),另外在 Mac OSX 上要用 otool 指令。

找到了 shared library 當然就是把他一起傳上去啦,但是執行時,要先在 shared library search path 中指定要去找你傳上去的位置,改變 search path 請指定在 LD_LIBRARY_PATH 變數中。

更多有關 dynamic library 的訊息可以看看 rtld ,它有解釋有那些環境變數可以用。

Unix-like 的系統真的非常有彈性。:)


0 意見: