Solaris

如何在 Solaris 10 上成功編譯 lsof?

  • January 14, 2016

用於 Solaris 的 lsof 預編譯包(例如來自 Blastwave 或 sunfreeware)不顯示埠打開,例如在使用選項時:“-Pni”。lsof 的創建者的智慧是我們應該自己編譯 lsof。tar 包、配置等與大多數可以從原始碼編譯的開源包非常不同。我在包中的線索不足,無法了解我的建構嘗試有什麼問題。

我有 Sun Studio 11 來提供 C 編譯器。還安裝了 Gcc 3.4.5

該系統是 sparc,所有文件系統上都有 ZFS。作業系統是 Solaris 10、U7。

uname -a
SunOS myhostname 5.10 Generic_141444-09 sun4u sparc SUNW,Sun-Fire-280R

lsof 源是 4.82。我配置了預設選項和 ZFS 支持。

使用 cc 或 gcc,執行 make 時的失敗是相似的:

gcc  -Dsolaris=100000  -DHASPR_GWINDOWS -m64 -DHASIPv6 -DHASSOUXSOUA -DHAS_IPCLASSIFIER_H -DHAS_CRED_IMPL_H -DHAS_V_PATH -DHASZONES -DHAS_ZFS=1 -DZFS_VERS=15 -DHASUTMPX -DHAS_VSOCK -DHAS_STRFTIME -DLSOF_VSTR=\"5.10\"  -O  -c  dnode.c
dnode.c: In function `process_node':
dnode.c:2082: error: structure has no member named `pcfs_entps'
*** Error code 1
make: Fatal error: Command failed for target `dnode.o'

幾個月前,我確實在非 ZFS 系統上使用 4.77 進行了編譯,但我不記得如何了。

我從Google搜尋中發現了對編譯錯誤部分的問題的引用

http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2009-07/msg00575.html

無需從 OpenSolaris 或其他地方獲取任何標頭檔。4.83 的測試版適用於我的 Sparc ZFS 機器,預設為配置腳本。

我現在在 Solaris 10 上有一個可用的 lsof -Pni 。

lsof FAQ指出Sun 沒有提供必要的標頭檔,在下面引用的部分繼續建議如何從Open Solaris 獲取它們以及可能遇到的其他問題之後。

17.27 Solaris 10 ZFS 問題

$$ sic $$ 17.27.1 為什麼 Configure 會詢問 ZFS 標頭檔的位置?

To provide ZFS support when lsof is compiled it needs to have
access to the definitions of ZFS structures used by the kernel.
Those definitions are contained in header files that Sun does
not distribute with Solaris 10.

引用自:https://serverfault.com/questions/85566