尽管我已经安装了 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 程序是动态的。
尽管我已经安装了 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 程序是动态的。