如何在 Solaris 10 上成功编译 lsof?

如何在 Solaris 10 上成功编译 lsof?

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 编译过它,但我不记得怎么做了。

答案1

lsof 常见问题解答指出 Sun 未提供必要的头文件,并且在下面引用的部分之后继续建议如何从 Open Solaris 获取它们以及可能遇到的其他问题。

17.27 Solaris 10 ZFS 问题[原文如此]

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.

答案2

我在谷歌上搜索编译错误部分时找到了这个问题的参考

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

无需从 OpenSolaris 或其他地方获取任何头文件。4.83 测试版在我的 Sparc ZFS 机器上运行,默认使用配置脚本。

我现在在 Solaris 10 上有一个可以运行的 lsof -Pni。

答案3

在等待真正的答案时,你可以给出五氯苯酚尝试在 Solaris 上替代 lsof。它是围绕非常有用的 Solaris 命令构建的pfiles

相关内容