【问题标题】:Cross compile gopacket for linux under MacOSMacOS下交叉编译gopacket for linux
【发布时间】:2021-10-22 00:12:11
【问题描述】:

我们想在 MacOS 下为 Linux 构建gopacket。

我们已经尝试过。

  1. CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build

错误

..gopacket/pcap/pcap.go:30:22: undefined: pcapErrorNotActivated
..gopacket/pcap/pcap.go:52:17: undefined: pcapTPtr
..gopacket/pcap/pcap.go:64:10: undefined: pcapPkthdr
  1. 尝试通过docker进行交叉编译golang-crossbuild
docker run -it --rm \
  -v /Users/my/server:/go/src/my/server \
  -w /go/src/my/server \
  -e CGO_ENABLED=1 \
  -e CGO_LDFLAGS+="-L/libpcap/libpcap-1.8.1-amd64" \
  docker.elastic.co/beats-dev/golang-crossbuild:1.16.4-main \
  --build-cmd "GOOS=linux GOARCH=amd64 go build . " \
  -p "linux/amd64"

错误

...pcap/pcap_unix.go:34:18: fatal error: pcap.h: No such file or directory
 #include <pcap.h>
                  ^
compilation terminated.

有没有更好的方法在 MacOS 下交叉编译 gopacket for linux?

【问题讨论】:

  • 如果您已经在 linux 容器中构建,那么您并不是真正的交叉编译。您只需要安装软件包的先决条件,例如 libpcap 和 gcc。

标签: go cross-compiling


【解决方案1】:

最后我们安装libpcap-dev后解决

首先,我们基于golang-crossbuild构建一个新的docker

Dockerfile

FROM docker.elastic.co/beats-dev/golang-crossbuild:1.16.4-main

RUN apt-get update && apt-get install -y libpcap-dev

构建脚本是

docker run -it --rm \
  -v /Users/my/server:/go/src/my/server \
  -w /go/src/my/server \
  -e CGO_ENABLED=1 \
  -e CC=aarch64-linux-gnu-gcc \
  -e CGO_LDFLAGS+="-L/libpcap/libpcap-1.8.1" \
  golang-new-builder:latest \
  --build-cmd "GOOS=linux GOARCH=amd64 go build . " \
  -p "linux/amd64"

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多