尽管我已经安装了 libpcap,但遇到 "lpcap not found" 错误

Facing error with "lpcap not found" although I have already installed libpcap

尽管我已经安装了 libpcap-devel,但某些软件包的 make 命令出现 cannot find lpcap 错误。

go build -i -ldflags "-linkmode external -extldflags -static -X main.version=git-6e3f8a1c7a0a" -tags netgo -o prog/weaver/weaver ./prog/weaver
# github.com/weaveworks/weave/prog/weaver
/go/pkg/tool/linux_s390x/link: running s390x-linux-gnu-gcc failed: exit status 1
/usr/lib64/gcc/s390x-suse-linux/7/../../../../s390x-suse-linux/bin/ld: cannot find -lpcap
/tmp/go-link-225248852/000015.o: In function `mygetgrouplist':
/tmp/workdir/go/src/os/user/getgrouplist_unix.go:15: warning: Using 'getgrouplist' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

我可以在

看到.so文件
 /usr/lib64 # ls | grep pcap
 libpcap.so
 libpcap.so.1
 libpcap.so.1.8.1 

安装库的开发版本,您将获得 headers 和 .a 文件以及 .so 共享库

C 链接器需要这些来进行静态链接

此外,构建过程需要能够找到 .a 文件。这应该会自动发生,但您可以帮助它

找到 .a 文件所在的目录(例如通过列出您用于安装的包)并在您的 ldflags

中添加带有 -L 选项的目录

openSUSE libpcap development RPm 不提供静态 libpcap.a,所以你不能静态 link libpcap 除非你 能够从源代码构建静态库(以及同样适用的任何其他库)。

从您的 -ldflags 中删除 -static 可以避免这个问题,如果您愿意的话 link 你的 go 程序是动态的。