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