某些软件包的make命令遇到“无法找到lpcap”错误,尽管我已经安装了libpcap.devel。
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
答案 0 :(得分:1)
openSUSE libpcap
development RPm
没有提供静态的libpcap.a
,因此除非您没有静态链接libpcap
能够从源代码(以及适用于其他代码的任何其他代码)构建静态库。
从-static
中删除-ldflags
可以避免此问题,如果可以的话
动态链接您的go程序。
答案 1 :(得分:0)
安装库的devel版本,您将获得标头,.a文件以及.so共享库
C链接器需要这些来进行静态链接
此外,构建过程还需要能够找到.a文件。这应该会自动发生,但您可以提供帮助
找到.a文件所在的目录(例如,列出您用于安装的软件包),并在ldflags中使用-L选项添加该目录